2011-07-02 44 views
4

.NET如何解析由动态编译的内存程序集程序引用的程序集。.NET--无法为已加载的程序集加载文件或程序集

我主持Razor视图引擎,并用它来即时编译视图,但在引用主项目的程序集 时遇到问题。在编译参数我引用添加到项目组装,这样的事情:

// Add references to all currently loaded assemblies 
foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) 
{ 
    compileParams.ReferencedAssemblies.Add(a.Location); 
} 

代码编译和运行正常,只要我不引用任何类型的项目中的DLL - 在这种情况下,我得到以下 错误:

Could not load file or assembly 'MyProject, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.

我仔细检查过,该组合已经被加载在其中异常被抛出点。我错过了什么?

+0

您的公共密钥令牌在哪里?您是将这些手动添加到您的配置文件还是通过IDE? –

+0

我试过签名和未签名的程序集,它没有区别。 –

回答

1

从代码看起来好像您正在创建单独的AppDomain以承载动态编译的内存中程序集。

这可能是你的动态编译的程序集引用了你的主应用程序没有的程序集。查看是否将您的例外转换为ReflectionTypeLoadException,并检查LoaderExceptions未提供线索。

+0

其实,没有这一切都在一个应用程序域 –

+0

你试过检查LoaderExceptions吗? –

2

想通了。主项目是一个exe文件加载到不同目录中的dll。 .NET程序集加载器默认搜索exe目录,但不是dll的目录。使用AppDomain.CurrentDomain.AssemblyResolve事件解决它,该事件搜索项目dll的文件夹。

+0

使用LoadFile?不要,它是邪恶的。 –

相关问题