Различные пакеты NuGet для операционной системы - PullRequest
0 голосов
/ 02 октября 2018

У меня есть тестовый проект в dotnet 2.1, который должен работать на нескольких платформах (в частности, на системах Windows и Linux), а также обращаться к базам данных DB2.

IBM предоставляет отдельные пакеты NuGet для разных операционных систем.:

  1. IBM.Data.DB2.Core
  2. IBM.Data.DB2.Core-lnx
  3. IBM.Data.DB2.Core-osx

Как я могу указать в своем файле .csproj, что я хочу использовать различные пакеты в зависимости от операционной системы?

Передача в RuntimeIdentifier (dotnet publish ... -r linux-x64) возможно, но я не уверен, как использовать эту информацию в csproj.Я также не против использования конструкции Choose/When, но не знаю, как определить, какая система пытается построить проект.

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Попробуйте:

<PackageReference Include="IBM.Data.DB2.Core-lnx" Version="1.3.0.100" Condition="'$(OSTYPE)' == 'linux-gnu'" />
<PackageReference Include="IBM.Data.DB2.Core-osx" Version="1.3.0.100" Condition="'$(OSTYPE)' == 'darwin18'"/>
<PackageReference Include="IBM.Data.DB2.Core" Version="1.3.0.100"  Condition="'$(OSTYPE)' != 'linux-gnu' AND '$(OSTYPE)' != 'darwin18'" />

Это зависит от того факта, что обе операционные системы Darwin и Linux устанавливают переменную OSTYPE.Windows не делает, поэтому просто проверка по умолчанию «не Дарвин и не Linux».

0 голосов
/ 04 октября 2018

Я закончил с использованием 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>.

Я нашел этот сайт , полезный для настройки этого в visual studio 2017.

...