我正在运行时编译动态程序集.它需要引用另一个dll.只要我在CompilerParameters中设置了OutputAssembly,一切正常.但是一旦我设置了GenerateInMemory = true; 它失败:
var compilerParameters = new CompilerParameters(); if( compileInMemory ) compilerParameters.GenerateInMemory = true; else compilerParameters.OutputAssembly = ""; compilerParameters.ReferencedAssemblies.Add( " " ); 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. }
LoaderExceptions告诉我无法找到"other_dll".为什么只要我不在内存中编译就可以工作,为了让它在内存中工作,我该怎么办呢?
使用GenerateInMemory时没有加载上下文,程序集由Assembly.Load(Byte [])重载加载.一种解决方法是暂时挂钩AppDomain.AssemblyResolve事件,以便您自己加载"other_dll".