.net Core无法找到本机dll,但.net Framework却可以找到

时间:2019-01-03 17:57:02

标签: c# .net-core interop

我有一个.Net Standard项目,该项目引用了我为所有目标构建的本机dll。

然后,我使用一个nuspec在私有nuget提要上发布了该项目:

<?xml version="1.0" encoding="utf-8"?>
<package>
  <metadata>
    ...
  </metadata>
  <files>
    <file src="..\bin\NetStandard20\Managed.dll" target="lib\netstandard2.0" />
    <file src="..\bin\NetStandard20\Managed.xml" target="lib\netstandard2.0" />
    <file src="..\bin\2017\Win32\Release\Native.dll" target="build\netstandard2.0\x86" />
    <file src="..\bin\2017\x64\Release\Native.dll" target="build\netstandard2.0\x64" />
    <file src="..\bin\2016\linux-x64\Release\Native.dll" target="build\netstandard2.0\linux-x64" />
    <file src="..\bin\2016\osx-x64\Release\Native.dll" target="build\netstandard2.0\osx-x64" />
    <file src="shared\Core\build\Managed.targets" target="build\netstandard2.0\Managed.targets" />
    <file src="shared\Core\lib\Managed.config" target="lib\netstandard2.0" />
  </files>
</package>

现在,当我将该nuget程序包安装到在Windows 10上运行的.Net Core应用程序时,并且我运行了针对x86的应用程序时,出现错误:

  

未处理的异常:System.DllNotFoundException:无法加载DLL   'Native.dll':找不到指定的模块。   (来自HRESULT的异常:0x8007007E)

奇怪的是,如果我将应用程序更改为.Net Framework应用程序,并且目标是相同的体系结构,则一切运行正常。

有人知道为什么会这样吗?

1 个答案:

答案 0 :(得分:0)

我想,您的项目中存在关于要定位的CPU体系结构的冲突。 win7-x86行指示NuGet使用x86版本的Native.DLL,AnyCPU指示该应用程序编译为AnyCPU,这意味着该进程可能以x64运行。这种不匹配可能是错误的根源。