我有一个在运行时加载插件的程序。我遍历“插件”目录中的每个目录,并尝试加载找到的DLL。每个插件都有其自己的目录以及插件DLL文件,另一个目录称为“ Dependencies”。如果插件的DLL调用AssemblyResolve事件,请执行以下操作:
没有第三方依赖关系或像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时出现此异常?
答案 0 :(得分:1)
Assembly.LoadFrom失败,因为我尝试引用的第三方DLL是作为.NET Framework项目构建的,并且我处于.NET Core项目中。我通过使用一个类作为.NET Framework类库项目创建自己的DLL来确认这一点,并收到相同的错误。一旦我采取了完全相同的方法并针对.NET Standard 2.0构建了它,一切都将正常加载。
我与供应商交谈,一旦他们提供了针对.NET Standard的不同DLL,该DLL便可以加载并找到其所有依赖项而没有问题。