首页 > 解决方案 > Native dll找不到.Net Core,但是可以找到.Net Framework

问题描述

我有一个 .Net 标准项目,它引用了我为所有目标构建的本机 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 应用程序,针对相同的架构,一切运行正常。

有谁知道为什么会这样?

标签: c#.net-coreinterop

解决方案


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


推荐阅读