dotnet опубликовать sln, имеющий проекты с несколькими целевыми фреймворками

У меня есть SLN со многими проектами. У кого-то есть целевой frameworknetcoreapp2.1, у кого-то есть целевой framework netstandard2.0, а у одного проекта двойная целевая платформа

<TargetFrameworks>netstandard2.0;net471</TargetFrameworks>

Я хотел бы иметь артикула для win10 с одной командой:

dotnet publish MySolution.sln -c Release -o "targetFolder" -r win10-x64

С помощью этой команды я получаю эту ошибку при сборке проекта с двойной целевой структурой. Вот ошибки:

C:\Program Files\dotnet\sdk\2.1.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.NET.Sdk.CrossTargeting.targets(31,5) error : The 'Publish' target is not supported without specifying a target framework. The current project targets multiple frameworks, please specify the framework for the published application.

Ошибка понятна. В конце я обнаружил, что dll скомпилирована в выходном каталоге, и кажется, что это dll netstandard2.0, потому что мое приложение все еще работает.

Я не люблю грязные вещи, так как я могу решить мою проблему?

Я бы не стал вызывать N раз команду "dotnet publish", если это возможно.

1 ответ

Решение

Не использовать dotnet publish с тем же каталогом вывода на решение. Особенно не с аргументом "-r".

Это опасно, потому что:

  • библиотеки не имеют правильного поведения обрезки для нестандартных фасадных пакетов
  • библиотеки могут иметь странное поведение при публикации с -r, особенно для netstandard<2.0 зависимостей. (они закончили бы копированием сборок реализации.NET Core 1.0/1.1 (!))
  • в результате вы можете получить разные зависимости NuGet (транзитивные зависимости)
  • Элементы копирования-вывода / публикации-каталога могут в конечном итоге перезаписывать друг друга, это может даже привести к сбоям сборки

Назовите его индивидуально для всех проектов приложений (консольных приложений, веб-приложений) или создайте файл MSBuild, в котором публикуются эти приложения.

Другие вопросы по тегам