Sto compilando un assembly dinamico in fase di esecuzione. Ha bisogno di fare riferimento a un'altra DLL. Tutto funziona bene, purché imposti un OutputAssembly nel mio CompilerParameters. Ma non appena ho impostato GenerateInMemory = true; fallisce:La compilazione di una classe in fase di esecuzione non riesce quando CompilerParameters.GenerateInMemory == true
var compilerParameters = new CompilerParameters();
if(compileInMemory)
compilerParameters.GenerateInMemory = true;
else
compilerParameters.OutputAssembly = "<my_dynamic_dll_path>";
compilerParameters.ReferencedAssemblies.Add("<other_dll_path>");
var compilerResults = new CSharpCodeProvider().CompileAssemblyFromDom(compilerParameters, codeCompileUnit);
// Here: compilerResults.Errors.HasErrors == false
foreach(var type in compilerResults.CompiledAssembly.GetTypes())
{
// Exception:
// Unable to load one or more of the requested types.
// Retrieve the LoaderExceptions property for more information.
}
I LoaderExceptions mi stanno dicendo che "other_dll" non è stato trovato. Perché funziona finché non compilo in memoria e cosa devo fare per farlo funzionare in-memory?
E se si codifica il percorso su other.dll? –
Mi dispiace, il percorso è già hardcoded - modificherà il mio post per chiarire – tanascius