gpt4 book ai didi

nuget - 使用包含 native DLL 的 nuget 包时发出警告

转载 作者:行者123 更新时间:2023-12-01 10:32:54 27 4
gpt4 key购买 nike

我正在构建一个 ASP.NET Core Web API 应用程序,它使用 .NET Standard 2.0 库来包装一些 C/C++ native 库。 native 库内置于特定平台的 Win32 .dll、Linux .so 和 MacOS .dylib 等,并作为二进制文件包含在包装库中。 NETStandard 库检测用户的平台并使用 P/Invoke 调用适当的本地库和方法。然后将此包装库发布到内部 NuGet 包源并从 ASP.NET Core 项目中引用。

这实际上效果很好并且按原样运行,但是在构建 ASP.NET 项目期间,我收到了一系列与底层 native 模块相关的警告:

Warning MSB3246 Resolved file has a bad image, no metadata, or is otherwise inaccessible. Could not load file or assembly 'mylibrary32.dll' or one of its dependencies. The module was expected to contain an assembly manifest.

native 库只是包含在包装器项目和包中,如下所示:
<ItemGroup>
<None Pack="true" PackagePath="lib/netstandard2.0/mylibrary32.dll" Update="mylibrary32.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
<None Pack="true" PackagePath="lib/netstandard2.0/mylibrary64.dll" Update="mylibrary64.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
... etc ...
</ItemGroup>

我可以很容易地忽略这些警告,但我们最终希望能够将此 nuget 包分发给客户,并且立即引入可怕警告的项目引用并不理想。如何构建 NETStandard 包装器项目/包,以便下游消费者不会尝试自己加载这些 native 库并生成警告?

最佳答案

native 库不应成为 lib 的一部分文件夹,但打包在 runtimes 下基于 .NET 核心使用的运行时标识符的文件夹。

所以你会打包成例如

runtimes/win-x86/native/mylib.dll
runtimes/win-x64/native/mylib.dll
runtimes/linux-x64/native/mylib.so
runtimes/osx-x64/native/mylib.dylib


从 .NET Core 应用程序使用时,这些将被放入 runtimes文件夹,主机将根据当前运行时标识符加载适当的文件夹。或者,NuGet 将为特定于运行时的项目(如 .NET Framework 项目)选择正确的 Assets 。

关于nuget - 使用包含 native DLL 的 nuget 包时发出警告,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48122173/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com