Dotnet опубликовать SLN, имеющий проекты с несколькими целевыми фреймворками не удается - PullRequest
0 голосов
/ 05 октября 2018

У меня есть решение со многими проектами.Некоторые целевые 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 Ответ

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

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

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

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

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

...