我正在构建一个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.
Run Code Online (Sandbox Code Playgroud)
本机库只是包含在包装器项目和包中,如下所示:
<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>
Run Code Online (Sandbox Code Playgroud)
我可以很容易地忽略这些警告,但我们最终希望能够将这个nuget包分发给客户,并且立即引入可怕警告的项目参考并不理想.如何构建NETStandard包装器项目/包,以便下游使用者不会尝试自己加载这些本机库并生成警告?