Nuget 包,带有用于 sdk 和非 sdk 项目类型的本机库,并支持多目标(net452、netstandard20、netstandard21)

Nuget package with native libraries for sdk and non-sdk project types and with supporting multitargetting (net452, netstandard20, netstandard21)

我有一个支持 3 种不同 TF 的 NuGet 程序包,应该可供 Non-sdk(旧 csproj 格式)和 Sdk 的消费者(应用程序)使用(一个新的)csproj 个文件。我的块还包含 native Windows、Linux 和 mac os.

我遇到的唯一问题与本地库的处理有关。 我以这种方式配置它(也有类似的步骤涵盖非windows OSs):

<!--IsWindows is defined in the first steps-->

<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
  <Content Include="$(MyLibrariesPathInTheSolution)/nativeWindowsLibrary.dll">
    <Pack>true</Pack>
    <PackagePath>runtimes/win/native</PackagePath>
  </Content>
</ItemGroup>

<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
  <Content Include="$(MyLibrariesPathInTheSolution)/nativeWindowsLibrary.dll">
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <Link>nativeWindowsLibrary.dll</Link>
  </Content>
</ItemGroup>

以上配置适用于 sdk 个项目,但不包括 non-sdk 个项目。所以,我在主 csproj:

中又添加了一步
<ItemGroup Condition=" '$(IsWindows)' == 'true' ">
  <Content Include="MyApp.targets">
    <Pack>true</Pack>
    <PackagePath>build</PackagePath>
  </Content>
</ItemGroup>

其中 MyApp.targets 看起来像:

<?xml version="1.0" encoding="utf-8"?>

<!--IsWindows is also defined here, skipped this definition just to reduce the number of lines-->

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">   
  <ItemGroup Condition=" '$(IsWindows)' == 'true' ">
    <Content Include="$(MSBuildThisFileDirectory)../runtimes/win/native/nativeWindowsLibrary.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
      <Link>nativeWindowsLibrary.dll</Link>
    </Content>
  </ItemGroup>
</Project>

以上解决了与 non-sdk 项目相关的消费者问题,但如果消费者使用 xamarin + mac OS 会触发问题,因为该平台试图处理 nativeWindowsLibrary.dllMacOS-built 库也被处理,但它预计与 Windows-built 不同)在构建过程中即使 OS = Windows 上有条件(在这种情况下是 false)。

所以,我的主要问题是有任何关于如何为我们需要支持的上述情况创建 NuGet 包的指南(示例):

另外,对提供的配置有什么建议吗?

这是 xamarin https://github.com/xamarin/xamarin-macios/issues/10337 中与 mono msbuild 问题相关的错误 https://github.com/mono/mono/issues/15569