0

我有一个 NuGet 包,它支持 3 种不同TF的 s,并且应该可用于Non-sdk(旧csproj格式)和Sdk(新格式)csproj文件的消费者(应用程序)。我的 nugget 还包含native适用于 Windows、Linux 和 mac os 的库。

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

<!--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-sdks. 因此,我在 main 中又添加了一步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则会触发问题,因为此平台在构建期间尝试处理(库也已处理,但预期不同)即使存在条件(适用于这种情况) )。xamarinmac OSnativeWindowsLibrary.dllMacOS-builtWindows-builtOS = Windowsfalse

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

  • 非 SDK 和 SDK 的 csproj 文件
  • 不同的目标框架
  • 平台相关库(放置在runtimes

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

4