【发布时间】:2018-06-15 18:31:30
【问题描述】:
我正在构建一个 ASP.NET Core Web API 应用程序,它使用 .NET Standard 2.0 库来包装一些 C/C++ 本机库。本机库内置于特定平台的 Win32 .dll、Linux .so 和 MacOS .dylib 等,并作为二进制文件包含在包装库中。 NETStandard 库检测用户的平台并使用 P/Invoke 调用适当的本地库和方法。然后将此包装库发布到内部 NuGet 包源并从 ASP.NET Core 项目中引用。
这实际上效果很好并且可以按原样运行,但是在构建 ASP.NET 项目期间,我收到了一系列与底层本机模块相关的警告:
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.
原生库简单地包含在包装器项目和包中,如下所示:
<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 包装器项目/包,以便下游消费者不会尝试自己加载这些本机库并生成警告?
【问题讨论】:
标签: nuget .net-standard