C# Assembly.LoadFrom无法加载DLL
我有一个在运行时加载插件的程序。我遍历“Plugins”目录中的每个目录,并尝试加载找到的DLL。每个插件都有自己的带有插件DLL文件的目录和另一个名为“Dependencies”的目录。如果插件的DLL调用AssemblyResolve事件,我将执行以下操作:C# Assembly.LoadFrom无法加载DLL,c#,.net,reflection,.net-assembly,C#,.net,Reflection,.net Assembly,我有一个在运行时加载插件的程序。我遍历“Plugins”目录中的每个目录,并尝试加载找到的DLL。每个插件都有自己的带有插件DLL文件的目录和另一个名为“Dependencies”的目录。如果插件的DLL调用AssemblyResolve事件,我将执行以下操作: 检查程序集是否已在当前AppDomain中,如果已在,则返回它 检查插件的依赖项目录中的DLL并尝试Assembly.LoadFrom 若不满足任何条件或上次LoadFrom调用失败,只需返回null 没有第三方依赖关系的插件,或者
- 检查程序集是否已在当前AppDomain中,如果已在,则返回它
- 检查插件的依赖项目录中的DLL并尝试Assembly.LoadFrom
- 若不满足任何条件或上次LoadFrom调用失败,只需返回null
为什么在运行时而不是通过Visual Studio的“添加引用”功能加载DLL时出现此异常?Assembly.LoadFrom失败,因为我尝试引用的第三方DLL是作为.NET Framework项目生成的,而我在.NET核心项目中。我通过使用一个类作为.NET Framework类库项目创建自己的DLL来确认这一点,并收到了相同的错误。有一次,我使用了完全相同的东西,针对.NET标准2.0构建了它,所有东西都加载良好
我和供应商谈过,一旦他们提供了一个针对.NET标准的不同DLL,DLL就能够加载并找到它的所有依赖项,而不会出现问题。听起来像是
custom\u library。DLL
实际上有其他不在当前进程搜索路径中的依赖项。如果您使用Microsoft的Dependency Walker工具,dependens.exe
,它是否声明了您不知道的任何静态DLL导入?这些静态引用可能是由的使用引起的。当我在Dependency Walker中打开DLL文件时,我得到了许多缺少的文件。它们是API-MS-WIN-CORE、API-MS-WIN-EVENTING、API-MS-WIN-SECURITY、API-MS-WIN-APPMODEL、API-MS-WIN-BASE、API-MS-WIN-corei、API-MS-WIN-CRT等等。它们有很多。IEFRAME.DLL、SHCORE.DLL和SHLWAPI.DLL是唯一显示为红色的。这是一个.NETDLL吗?如何在VisualStudio中引用它而不出错?插件DLL的目标是否与您的进程相同?它是否使用相同的平台(x86/x64)?