Assembly.LoadFrom无法加载DLL

时间:2019-09-07 03:49:53

标签: c# .net reflection .net-assembly

我有一个在运行时加载插件的程序。我遍历“插件”目录中的每个目录,并尝试加载找到的DLL。每个插件都有其自己的目录以及插件DLL文件,另一个目录称为“ Dependencies”。如果插件的DLL调用AssemblyResolve事件,请执行以下操作:

  • 检查程序集是否已存在于当前AppDomain中,如果已存在则返回它
  • 检查插件的Dependencies目录中的DLL,然后尝试Assembly.LoadFrom
  • 如果不满足任何条件或上一次LoadFrom调用失败,则返回null

没有第三方依赖关系或像Newtonsoft.Json或NHibernate这样的简单依赖关系的插件都很好。我有一个依赖于DLL的插件,我们将其称为“ custom_library.dll”。在触发AssemblyResolve事件以查找此依赖项时,我可以确认该文件位于应有的依赖关系目录中,甚至File.Exists()调用也返回true。

不幸的是,对此DLL的Assembly.LoadFrom()调用引发FileLoadException,消息为“无法加载文件或程序集'custom_library.dll,Version = 5.3.136.0,Culture = neutral,PublicKeyToken = null”。除了HRESULT -2146233079之外,还提供了其他功能。我也可以通过Visual Studio毫无问题地引用此DLL。

为什么尝试在运行时而不是通过Visual Studio的“添加引用”功能加载DLL时出现此异常?

1 个答案:

答案 0 :(得分:1)

Assembly.LoadFrom失败,因为我尝试引用的第三方DLL是作为.NET Framework项目构建的,并且我处于.NET Core项目中。我通过使用一个类作为.NET Framework类库项目创建自己的DLL来确认这一点,并收到相同的错误。一旦我采取了完全相同的方法并针对.NET Standard 2.0构建了它,一切都将正常加载。

我与供应商交谈,一旦他们提供了针对.NET Standard的不同DLL,该DLL便可以加载并找到其所有依赖项而没有问题。