Je compile un assembly dynamique lors de l'exécution. Il doit faire référence à une autre DLL. Tout fonctionne bien, à condition de définir un OutputAssembly dans mes CompilerParameters. Mais dès que je mets GenerateInMemory = true; il échoue:La compilation d'une classe à l'exécution échoue lorsque 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.
}
Les LoaderExceptions me disent que "other_dll" n'a pas pu être trouvé. Pourquoi cela fonctionne-t-il tant que je ne compile pas en mémoire et que dois-je faire pour le faire fonctionner en mémoire?
Et si vous codez le chemin d'accès à other.dll? –
Je suis désolé, le chemin est déjà codé en dur - va éditer mon message pour clarifier – tanascius