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

本文关键字:程序集 加载 文件 NET- | 更新日期: 2023-09-27 18:01:00

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

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

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

只要我不引用项目DLL中的任何类型,代码编译和运行都很好——在这种情况下,我会得到以下内容错误:

无法加载文件或程序集"MyProject,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null"或其依赖项之一。系统找不到指定的文件。

我仔细检查了一下,这个程序集已经在抛出异常的地方加载了。我错过了什么?

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

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

从代码中,它看起来就像是在创建一个单独的AppDomain来托管动态编译的内存程序集。

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