我在dotnet 2.1中有一个测试项目,该项目需要跨多个平台(特别是基于Windows和linux的系统)以及访问DB2数据库的工作。
IBM为不同的操作系统提供了单独的NuGet软件包:
如何在
.csproj
文件中指定要基于操作系统使用不同的软件包? 可以传入
RuntimeIdentifier
(dotnet publish ... -r linux-x64
),但是我不确定如何在csproj
内部使用该信息。我也不反对使用Choose/When
构造,但是不知道如何推断哪个系统正在尝试构建项目。
最佳答案
我最终使用了Configuration
和Choose/When
范例。
一个简单的.csproj
示例是
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netcoreapp2.1</TargetFramework>
<Configurations>Debug;Release;Docker</Configurations>
<Platforms>AnyCPU;x64</Platforms>
</PropertyGroup>
... the rest of your .csproj and dependencies ...
<Choose>
<When Condition=" '$(Configuration)'=='Docker' ">
<ItemGroup>
<PackageReference Include="IBM.Data.DB2.Core-lnx" Version="1.2.2.100" />
</ItemGroup>
</When>
<Otherwise>
<ItemGroup>
<PackageReference Include="IBM.Data.DB2.Core" Version="1.2.2.100" />
</ItemGroup>
</Otherwise>
</Choose>
</Project>
在命令行上,我将运行:
dotnet build /your/project.csproj -c <yourConfigurationName>
。我发现this site对于帮助在Visual Studio 2017中进行设置非常有用。
关于c# - 基于操作系统的不同NuGet软件包,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52612790/