none
nuget-сброка под разные платформы RRS feed

  • Общие обсуждения

  • Кто подскажет, чтобы собрать сборку (библиотеку) под разные платформы для дальнейшей её публикации на nuget.org, что необходимо сделать?

    Это несколько различных проектов нужно по отдельности компилировать, а затем выдёргивать из каждой dll-ки?

    16 февраля 2021 г. 12:16

Все ответы

  • Здравтвуйте,

    Ознакомьтесь с Nugitizer, может подойдет:


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    16 февраля 2021 г. 15:29
    Модератор
  • При использовании современного формата проекта (VS 2017+ или .NET Core SDK) ничего особенного делать не нужно. Вы выбираете несколько целевых платформ, устанавливаете GeneratePackageOnBuild, и тогда при сборке генерируется пакет с несколькими целевыми платформами. Файл проекта должен выглядеть как-то так:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFrameworks>netstandard2.0;net45</TargetFrameworks>    
        <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
        
      </PropertyGroup>
    </Project>
    При старом типе проекта или если это вовсе не msbuild, да, нужно вручную компоновать dll-ки в несколько подкаталогов в /lib, и потом паковать это командной строкой.

    16 февраля 2021 г. 16:20
  • Допустим, а как быть с совместимостью с net451?

    Изначально библиотеку писал под netstandard2.1, в рамках проекта было установлено несколько системных пакетов, теперь получаю ошибки следующего вида:

    Пакет System.Text.Encoding.CodePages 5.0.0 несовместим с net451 (.NETFramework,Version=v4.5.1).
    Пакет System.IO.Ports 5.0.0 несовместим с net451 (.NETFramework,Version=v4.5.1).

    Даже если я введу в коде логическое управление кодом на основе платформы, то как быть со связкой зависимостей?

    17 февраля 2021 г. 4:39
  • Я так понимаю, это только для 2017 студии, для 2019 уже не актуально?
    17 февраля 2021 г. 4:40
  • Для связок зависимостей также можно ввести логическое управление на основе платформы:

    <PropertyGroup Condition="'$(TargetFramework)'=='netstandard2.0'">
        <PackageReference Include="..." Version="..." />
    </PropertyGroup>

    Что касается System.Text.Encoding.CodePages, System.IO.Ports, насколько я понимаю, эти пакеты в net framework не нужны, так как и кодировки, и работа с портами встроены в саму стандартную библиотеку. 

    >Я так понимаю, это только для 2017 студии, для 2019 уже не актуально?

    То, что я написал, актуально и для VS 2017, и для VS2019.

    17 февраля 2021 г. 5:58
  • >Я так понимаю, это только для 2017 студии, для 2019 уже не актуально?

    То, что я написал, актуально и для VS 2017, и для VS2019.

    Это относится к Nugitizer 3000, про него писал Maksim MarinovConcentrix(MSFT CSG).

    А что касается логического управления завизимостей на основе платформы, сейчас поробую "выпилить" пакет из NET45.

    17 февраля 2021 г. 6:09
  • Здравствуйте,

    Судя по документации на Гите, к сожалению только под 2017.


    Если Вам помог чей-либо ответ, пожалуйста, не забывайте жать на кнопку "Предложить как ответ" или "Проголосовать за полезное сообщение" Мнения, высказанные здесь, являются отражение моих личных взглядов, а не позиции корпорации Microsoft. Вся информация предоставляется "как есть" без каких-либо гарантий.

    22 февраля 2021 г. 14:09
    Модератор