当前位置:  开发笔记 > 编程语言 > 正文

当CompilerParameters.GenerateInMemory == true时,在运行时编译一个类失败

如何解决《当CompilerParameters.GenerateInMemory==true时,在运行时编译一个类失败》经验,为你挑选了1个好方法。

我正在运行时编译动态程序集.它需要引用另一个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".为什么只要我不在内存中编译就可以工作,为了让它在内存中工作,我该怎么办呢?



1> Hans Passant..:

使用GenerateInMemory时没有加载上下文,程序集由Assembly.Load(Byte [])重载加载.一种解决方法是暂时挂钩AppDomain.AssemblyResolve事件,以便您自己加载"other_dll".

推荐阅读
mobiledu2402851173
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有