C# .NET-无法为已加载的程序集加载文件或程序集

C# .NET-无法为已加载的程序集加载文件或程序集,c#,.net,C#,.net,NET如何解析动态编译的内存程序集引用的程序集 我正在托管Razor视图引擎,并使用它动态编译视图,但在引用它时遇到问题 主要项目的组装。在编译参数中,我添加了对项目程序集的引用,如下所示: // Add references to all currently loaded assemblies foreach (var a in AppDomain.CurrentDomain.GetAssemblies()) { compileParams.ReferencedAssemblies.A

NET如何解析动态编译的内存程序集引用的程序集

我正在托管Razor视图引擎,并使用它动态编译视图,但在引用它时遇到问题 主要项目的组装。在编译参数中,我添加了对项目程序集的引用,如下所示:

// Add references to all currently loaded assemblies
foreach (var a in AppDomain.CurrentDomain.GetAssemblies())
{
    compileParams.ReferencedAssemblies.Add(a.Location);
}
只要我不引用项目DLL中的任何类型,代码就能编译并运行良好——在这种情况下,我会得到以下结果 错误:

无法加载文件或程序集“MyProject,版本=1.0.0.0,区域性=中性,PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件


我仔细检查了一下,这个程序集已经在抛出异常的位置加载了。我缺少什么?

从代码中可以看出,您似乎正在创建一个单独的AppDomain来承载动态编译的内存程序集


可能是动态编译的程序集引用的程序集与主应用程序不同。查看是否将您的异常强制转换为
ReflectionTypeLoadException
并检查
LoaderExceptions
没有提供线索。

找到了答案。主项目是由不同目录中的exe加载的dll。NET程序集加载程序默认搜索exe目录,但不搜索dll的目录。使用搜索项目dll文件夹的AppDomain.CurrentDomain.AssemblyResolve事件解决了此问题。

程序集的公钥令牌在哪里?您是手动将这些添加到配置文件还是通过IDE?我已经尝试了有符号和无符号程序集,但没有区别。实际上,没有,这都是在一个应用程序域中使用LoadFile?不要,这是邪恶的。