Assembly.LoadFrom 加载 DLL 失败
Assembly.LoadFrom fails to load DLL
我有一个在运行时加载插件的程序。我遍历 "Plugins" 目录中的每个目录并尝试加载找到的 DLL。每个插件都有自己的目录,其中包含插件 DLL 文件和另一个名为 "Dependencies" 的目录。如果插件的 DLL 调用 AssemblyResolve 事件,我将执行以下操作:
- 检查程序集是否已经在当前的 AppDomain 中,如果是,return它
- 检查插件的 DLL 依赖目录并尝试 Assembly.LoadFrom
- 如果没有满足任何条件或最后一次 LoadFrom 调用失败只是 return null
没有第 3 方依赖项的插件或像 Newtonsoft.Json 或 NHibernate 这样的简单插件加载得很好。我有一个依赖于 DLL 的插件,我们将调用 "custom_library.dll." 当 AssemblyResolve 事件被触发以查找此依赖项时,我可以确认文件在 Dependencies 目录中,就像它应该的那样,甚至是 File.Exists() 调用 return 为真。
不幸的是,对此 DLL 的 Assembly.LoadFrom() 调用抛出 FileLoadException 并显示消息“无法加载文件或程序集 'custom_library.dll, Version=5.3.136.0, Culture=neutral, PublicKeyToken=null'。除了 HRESULT -2146233079 之外,在异常中没有提供任何其他内容。我也可以通过 Visual Studio 引用此 DLL 没有问题。
为什么我尝试在运行时而不是通过 Visual Studio 的添加引用功能加载 DLL 时出现此异常?
Assembly.LoadFrom 失败了,因为我试图引用的第 3 方 DLL 是作为 .NET Framework 项目构建的,而我在 .NET Core 项目中。我通过使用一个 class 作为 .NET Framework Class 库项目创建自己的 DLL 来确认这一点,并收到相同的错误。一旦我采用完全相同的东西并针对 .NET Standard 2.0 构建它,一切都加载正常。
我与供应商进行了交谈,一旦他们提供了一个针对 .NET Standard 的不同 DLL,该 DLL 就能够毫无问题地加载并找到它的所有依赖项。
我有一个在运行时加载插件的程序。我遍历 "Plugins" 目录中的每个目录并尝试加载找到的 DLL。每个插件都有自己的目录,其中包含插件 DLL 文件和另一个名为 "Dependencies" 的目录。如果插件的 DLL 调用 AssemblyResolve 事件,我将执行以下操作:
- 检查程序集是否已经在当前的 AppDomain 中,如果是,return它
- 检查插件的 DLL 依赖目录并尝试 Assembly.LoadFrom
- 如果没有满足任何条件或最后一次 LoadFrom 调用失败只是 return null
没有第 3 方依赖项的插件或像 Newtonsoft.Json 或 NHibernate 这样的简单插件加载得很好。我有一个依赖于 DLL 的插件,我们将调用 "custom_library.dll." 当 AssemblyResolve 事件被触发以查找此依赖项时,我可以确认文件在 Dependencies 目录中,就像它应该的那样,甚至是 File.Exists() 调用 return 为真。
不幸的是,对此 DLL 的 Assembly.LoadFrom() 调用抛出 FileLoadException 并显示消息“无法加载文件或程序集 'custom_library.dll, Version=5.3.136.0, Culture=neutral, PublicKeyToken=null'。除了 HRESULT -2146233079 之外,在异常中没有提供任何其他内容。我也可以通过 Visual Studio 引用此 DLL 没有问题。
为什么我尝试在运行时而不是通过 Visual Studio 的添加引用功能加载 DLL 时出现此异常?
Assembly.LoadFrom 失败了,因为我试图引用的第 3 方 DLL 是作为 .NET Framework 项目构建的,而我在 .NET Core 项目中。我通过使用一个 class 作为 .NET Framework Class 库项目创建自己的 DLL 来确认这一点,并收到相同的错误。一旦我采用完全相同的东西并针对 .NET Standard 2.0 构建它,一切都加载正常。
我与供应商进行了交谈,一旦他们提供了一个针对 .NET Standard 的不同 DLL,该 DLL 就能够毫无问题地加载并找到它的所有依赖项。