我有一个.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应用程序,并且目标是相同的体系结构,则一切运行正常。
有人知道为什么会这样吗?
答案 0 :(得分:0)
我想,您的项目中存在关于要定位的CPU体系结构的冲突。 win7-x86行指示NuGet使用x86版本的Native.DLL,AnyCPU指示该应用程序编译为AnyCPU,这意味着该进程可能以x64运行。这种不匹配可能是错误的根源。