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, в котором публикуются эти приложения.