Как "dotnet pack" уже скомпилированный проект - PullRequest
0 голосов
/ 08 мая 2018

Я пытаюсь разработать скрипт сборки для проекта dotnet core 2.0, который выполняет следующие действия

  1. Очищает выходные каталоги
  2. Создает решение с -o bin \ Publish
  3. Запускает юнит-тесты с помощью dotnet vstest
  4. Создает пакет Nuget с пакетом dotnet

Поскольку я знаю, что исходный код был собран и протестирован на шагах 1-3, я не хочу перестраивать свой код для пакета nuget, поэтому я указываю --no-build и --no-restore

Трудность, с которой я сталкиваюсь, заключается в том, что при создании пакета, поскольку я не собираю, а выходной каталог установлен как bin \ Publish - команда pack ищет элементы в каталоге bin \ Debug.

Есть ли способ установить команду dotnet pack на знать где искать уже скомпилированные объекты?

Вот пример моего скрипта сборки

dotnet clean ..\MySolution.sln -o bin/Publish/
dotnet build ..\MySolution.sln /p:Configuration=Release -o bin/Publish/
dotnet vstest ..\MySolution.UnitTests\bin\Publish\MySolution.UnitTests.dll
dotnet pack --no-build --no-restore ..\MySolution.ConsoleApp\MySolution.csproj -o bin\Publish\Nuget\

....

error : The file 'D:\MySolution.ConsoleApp\bin\Debug\netcoreapp2.0\MySolution.ConsoleApp.runtimeconfig.json' to be packed was not found on disk

Согласно Документам Microsoft по пакету dotnet

"По умолчанию dotnet pack сначала строит проект. Если вы хотите чтобы избежать этого, передайте опцию --no-build. Это часто полезно в сценариях построения непрерывной интеграции (CI), в которых вы знаете код был ранее построен. "

Так что я надеюсь, что это возможно, и я упускаю что-то очевидное. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 08 мая 2018

Причина этого в том, что опция dotnet pack --no-build будет пытаться использовать ранее построенный вывод, но не может найти его, поскольку вы собрали нестандартный путь вывода, а логика пакета должна найти некоторые активы, сгенерированные в вывод сборки.

Опции -o внутренне отличаются для команд pack и build, но вы можете изменить команду pack на:

dotnet pack --no-build --no-restore ..\MySolution.ConsoleApp\MySolution.csproj -o bin\Publish\Nuget\ /p:OutputPath=bin\Publish\

Это будет использовать выходные данные, встроенные в каталог bin\Publish, и поместить их в выходной каталог Nuget в bin\Publish\Nuget\

...