Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/274.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Assembly.LoadFrom无法加载DLL_C#_.net_Reflection_.net Assembly - Fatal编程技术网

C# Assembly.LoadFrom无法加载DLL

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 没有第三方依赖关系的插件,或者

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

  • 检查程序集是否已在当前AppDomain中,如果已在,则返回它
  • 检查插件的依赖项目录中的DLL并尝试Assembly.LoadFrom
  • 若不满足任何条件或上次LoadFrom调用失败,只需返回null
没有第三方依赖关系的插件,或者像Newtonsoft.Json或NHibernate这样的简单插件都可以正常加载。我有一个依赖于DLL的插件,我们将只调用“custom_library.DLL”。当启动AssemblyResolve事件查找此依赖项时,我可以确认该文件在Dependencies目录中,就像它应该的那样,甚至file.Exists()调用都返回true

不幸的是,此DLL的Assembly.LoadFrom()调用会抛出一个FileLoadException,并显示以下消息无法加载文件或程序集“custom_library.dll,Version=5.3.136.0,Culture=neutral,PublicKeyToken=null”。除HRESULT-2146233079外,本例外中未提供任何其他内容。我也可以通过VisualStudio毫无问题地引用此DLL


为什么在运行时而不是通过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)?