适用于Linux和Windows的NuGet软件包

elcex8rz  于 2023-03-01  发布在  Linux
关注(0)|答案(1)|浏览(219)

我使用的是nuget包net.ibm.data.db2(-〉windows),它也可以作为net.ibm.data.db2-lnx(-〉linux)使用。现在,当使用net.ibm.data.db2(or -lnx)在VS 2022中构建我自己的.Net 6项目MyProj.csproj时,我可以根据构建配置简单地选择使用哪一个:

<Choose>
  <When Condition="'$(Configuration)'=='Debug-Linux' OR '$(Configuration)'=='Release-Linux'">
    <ItemGroup>
      <PackageReference Include="net.ibm.data.db2-lnx" Version="6.0.0.200">
        <PrivateAssets>none</PrivateAssets>
      </PackageReference>
    </ItemGroup>
  </When>
  <Otherwise>
    <ItemGroup>
      <PackageReference Include="net.ibm.data.db2" Version="6.0.0.200">
        <PrivateAssets>none</PrivateAssets>
      </PackageReference>
    </ItemGroup>
  </Otherwise>
</Choose>

但是当我打包我的项目时,它对打包时选择的构建配置 * 只有一个依赖 *,要么是windows包 * 要么是linux包。

  • 〉如果我想在其他地方引用这个包,我必须创建一个包MyProj和MyProj-lnx,让其他人使用我的windows和linux包。
    如果他们想创建一个软件包,他们必须提供一个windows和linux软件包,等等。
    我怎样才能制作一个包含两个版本的软件包,并根据构建配置或其他我可以配置的东西来选择正确的一个?我想为我的客户提供一个myproj.nupkg,用于构建和发布windows和linux程序集,这样他们就不必有所不同或选择任何东西。
    可以假设所有客户端都获得了Debug-LinuxRelease-Linux配置
zaqlnxep

zaqlnxep1#

我注意到他们的dll文件名是相同的,API似乎也是相同的。
所以我对你的要求有一个想法。你可以基于dll文件而不是包管理器。
首先,您可以在项目根目录中运行nuget命令:

nuget install Net.IBM.Data.Db2
nuget install Net.IBM.Data.Db2-lnx

然后将所需的内容添加到项目引用中,如下所示:

<ItemGroup Condition="'$(OS)' == 'Windows_NT'">
    <Reference Include="windows_package_path\IBM.Data.Db2.dll" />
  </ItemGroup>
  <ItemGroup Condition="'$(OS)' == 'Linux'">
    <Reference Include="linux_package_path\IBM.Data.Db2.dll" />
  </ItemGroup>

属性“OS”将获取当前系统类型,Windows操作系统将获取“Windows_NT”,Linux操作系统将获取“Linux”。

相关问题