Как интегрировать публикацию exe в сборку VS2019 приложения console. net core 2.2? - PullRequest
0 голосов
/ 29 мая 2020

Я видел пару похожих вопросов, но до сих пор не нашел однозначного ответа на проблему интеграции этапа публикации с моим процессом сборки. К сожалению, команда do tnet publi sh снова перестраивает проект, что означает, что если я введу команду «do tnet publi sh» в этапы пост-сборки проекта, я получу бесконечное l oop повторных попыток сборки. .

Я хочу получить exe, созданный для моего. NET Консольное приложение Core 2.2 для нескольких выбранных сред, например. osx и windows -10, возможно, linux тоже, каждый в своей папке. Очевидным условием является то, что он должен быть интегрирован со сборкой, поэтому никаких дополнительных шагов (команд) руководства не требуется. Это должно работать как в VS2019 Pro, так и в CI (например, AzureDevOps).

Достижим ли этот базовый c шаг или Net core было серьезным шагом назад в процессе разработки программного обеспечения? Надеюсь, я просто что-то упустил и сильно преувеличиваю. :)

Спасибо, Радек

Ответы [ 2 ]

1 голос
/ 05 июня 2020

Я хочу получить exe, созданный для моего. NET Консольное приложение Core 2.2 для нескольких выбранных сред, например. osx и windows -10, возможно, linux тоже, каждый в своей папке. Очевидным условием является то, что он должен быть интегрирован со сборкой, поэтому никаких дополнительных шагов (команд) руководства не требуется. Это должно работать как в VS2019 Pro, так и в CI (например, AzureDevOps).

Достижим ли этот базовый c шаг или Net ядро ​​было серьезным шагом назад в процессе разработки программного обеспечения?

Это хорошая идея, но насколько я знаю, то, что вы хотите, пока не поддерживается на 100%.

Похоже, ваш ожидаемый сценарий:

Нажмите кнопку Build (F5) => Проект будет построен на разных платформах win-x64,win-x86,linux-x64..., также будет опубликован на разных платформах автоматически в автономном режиме.

Но факт таков:

1. Нажмите кнопку Build (Build (F5) равно кнопке Build в контекст проекта) запустит цель Build (встроенная цель по умолчанию для каждого проекта для сборки). => dotnet build in command-line.

2. Нажмите кнопку Publi sh, чтобы запустить цель Publish (встроенная цель по умолчанию для каждого проекта для publi sh). => dotnet publish in command-line.

enter image description here

3.Если у вас есть какая-либо команда build/publish в событии после сборки, это приведет к ожидаемому l oop. Так что сложно идеально сочетать publish с build, поскольку это два действия в VS с разными кнопками / поведением / соответствующей командой. (Только команда tnet publi sh может распознать --self-contained)

4.Для сборки / публикации sh проектов параллельно , командного файла или msbuild target файл - хороший выбор.

#1. Создавайте разные платформы с помощью одной команды сборки, см. this . #2 .Публикации sh разных платформ с помощью одной команды см. это . (Они оба используют настраиваемые .targets для выполнения работы)

Предложения:

Согласно вашему сценарию, я думаю, вы можете рассмотреть возможность использования # 2. Во время нормальной разработки вам не обязательно использовать разные платформы.

1.В локальной VS при разработке и отладке:

Для отладки достаточно кнопки / параметра сборки по умолчанию.

2. В локальной VS, когда вы хотите опубликовать sh проект на разных платформах:

Используйте # 2 выше, чтобы sh их можно было опубликовать с помощью cmd.exe или PS.exe. (С помощью команды dotnet msbuild -restore -t:PublishAllRids)

3.Когда вы автоматизируете конвейер CI в AzDeops (также используйте # 2):

Достаточно задачи CMD / PS с командой dotnet msbuild -restore -t:PublishAllRids . Do tnet publi sh будет построен автоматически, если мы не передадим аргумент --no-build.

4. Azure Служба Devops предлагает разделить задания в разных задачах, не рекомендуется интегрировать Publi sh с усиленной сборкой, особенно для основных проектов. net. (Вот официальный образец о CI для. net основных проектов.)

Надеюсь, что все вышеперечисленное поможет дать правильное направление :)

1 голос
/ 01 июня 2020

Как интегрировать публикацию exe со сборкой консоли VS2019. net приложение core 2.2?

Собственно , думаю, вам не нужно беспокоиться об этом.

dotnet publish уже содержит процесс сборки. Процесс Publi sh сначала выполнит Build , а затем - publi sh. Одним словом, Build - это часть процесса Publi sh.

Итак, когда вы вводите dotnet publish под Build , вы получите бесконечное l oop повторных попыток сборки.

Решение

----- Просто удалите событие после сборки в файле xxx.csproj и просто dotnet publish, и оно будет сначала запустите процесс сборки.

Вы можете протестировать в локальной VS, и когда вы щелкните правой кнопкой мыши свой проект -> Publi sh, он покажет шаг на выходе windwow.

Вдобавок , насколько мне известно, Azure DevOps имеет задачу под названием dotnet publish, которая содержит сборку.

enter image description here

и , если вы хотите сделать какую-то настраиваемую цель msbuild только для шага publi sh, вы можете добавить условие, например Condition="'$(DeployOnBuild)'=='true'", оно будет выполняться для Publi sh процесс, а не обычный этап сборки (щелкните правой кнопкой мыши проект -> Сборка).

<Target Name="testone" Condition="'$(DeployOnBuild)'=='true'" AfterTargets="Build">

    xxxxxxxxxxxxxx  

</Target>

--------------- Обновление 1 ----------------

Первый вопрос

Собственно , сборка publi sh - это чистый процесс, а затем publi sh скопирует содержимое вывода сборки в publi sh fol дер. Таким образом, программа выполнения находится только в выходной папке сборки.

См. Журнал publi sh:

enter image description here

Таким образом, вы не должны указывать цель publi sh в процессе сборки . Это лишнее.

Второй вопрос

Чтобы сгенерировать эту программу для Window-10, linux или osx, вы можете попробовать эту командную строку для publi sh ваш проект: (Release - это стандартная конфигурация сборки выпуска)

Для Win-10:

dotnet publish -r win10-x64 -c Release --self-contained

Linux:

dotnet publish -r linux-x64 -c Release --self-contained

Для osx:

dotnet publish -r osx.10.12-x64 -c Release --self-contained

Таким образом проект сначала создается в соответствии с указанной средой выполнения, а затем публикуется.

Подробнее о. NET Core RID Catalog, вы можете обратиться к этому документу .

Обновление 2

I думаю, вам следует изменить конфигурацию в этом пользовательском интерфейсе пакета:

enter image description here

enter image description here

Затем нажмите Сохранить .

Кроме того, когда вы публикуете sh этот веб-проект, попробуйте удалить папку bin и obj, а затем опубликовать sh ее.

Отладка : bin\Debug\netcoreapp2.1\publish

Выпуск : bin\Release\netcoreapp2.1\publish

Или вы должны использовать команду do tnet как Я описал публике sh свой проект. Путь находится в папке Debug или Release.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...