适用于 Linux 和 Windows 的 NuGet 包

问题描述 投票:0回答:1

我正在使用 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-Linux
Release-Linux
配置

linux windows nuget visual-studio-2022
1个回答
0
投票

我注意到它们的 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>

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

© www.soinside.com 2019 - 2024. All rights reserved.