Сборка пакетов NuGet из Visual Studio - PullRequest
0 голосов
/ 30 октября 2019

Я пытаюсь поделиться внутренней компоновкой компании через пакеты NuGet и частный источник. Эта сборка предназначена для .NET Framework 4.6.1. Я хочу, чтобы эти пакеты NuGet автоматически упаковывались из Visual Studio во время сборки выпуска. Я вижу, что могу добавить <GeneratePackageOnBuild>true</GeneratePackageOnBuild> к .csproj. Я не уверен, является ли это свойство специфичным для .NET Standard, но, похоже, оно частично работает. Однако при сборке я получаю

error MSB4044: The "GetPackOutputItemsTask" task was not given a value for the required parameter "PackageOutputPath".

Я пытался узнать, как передать этот параметр из Visual Studio, но я не вижу много документации по параметрам, кроме как при вызове его изкомандная строка вручную. Есть ли простой способ сделать это из Visual Studio? Я ошибаюсь?

Редактировать: Это использует библиотеку классов .NET Framework. Я могу запустить команду pack из командной строки, задав ей необходимые параметры с помощью /p:PackageOutputPath="path\here". Возможно, это было разработано для проектов .NET Core и Standard, и Visual Studio может не обрабатывать пакеты проектов .NET Framework.

Ответы [ 2 ]

0 голосов
/ 01 ноября 2019

У меня уникальная ситуация: мне нужно зарегистрироваться для Com Interop для более старого приложения, но мне также нужно упаковать его для использования в других внутренних приложениях и разработках в нашей компании. Я действительно заставил это работать для проекта .NET Framework из Visual Studio. Добавление вручную GeneratePackageOnBuild попыталось сделать пакет для меня в VS2017. Я также смог добавить другие свойства проекта .NET Core, такие как <Authors>, <Description> и т. Д. Я еще не пробовал VS2019, так что, возможно, это более ограничено, но я надеюсь, что нет.

ПроблемаVS2017 не передает целевой пакет выходным параметром (в этом типе проекта). Затем я попытался вызвать pack в событиях After Build, но это вызывает рекурсивный цикл, потому что pack также пытается собрать (dotnet и nuget оба, похоже, вызывают цель пакета msbuild, которая вызывает сборку). Затем я нашел опцию -p:NoBuild=true для msbuild, которая позволяет мне вызывать цель пакета без msbuild, фактически собирающей проект. Поэтому я добавил следующую команду к <PostBuildEvent>, и она работает.

"$(MSBuildBinPath)\msbuild" -t:Pack "$(ProjectPath)" -p:PackageOutputPath="$(SolutionDir)..\packages" -p:NoBuild=true
0 голосов
/ 31 октября 2019

Я ошибаюсь?

Это свойство GeneratePackageOnBuild не относится к .net framework проектам. Создайте новый проект библиотеки классов .net Standard или .net Core, щелкните правой кнопкой мыши проект, и вы увидите команду Pack (недоступно для .net framework).

enter image description here

Если мы нажмем кнопку, VS упакует эту сборку в пакет nuget. И если кто-то не хочет нажимать эту кнопку каждый раз вручную, перейдите на Project=>Properties=>Package и мы увидим флажок Generate Nuget Packages on build. Включите его, и тогда пакет nuget будет создаваться после каждой сборки.

На самом деле, включение этого флажка в VS добавит оператор <GeneratePackageOnBuild>true</GeneratePackageOnBuild> в xx.csproj, но кнопка Pack или Package на вкладке Project=>Properties недоступныдля .net Framework проектов.

Так что, боюсь, ответ отрицательный, вы не должны использовать это свойство для проектов .net framework. (Я тестировал это свойство в VS2017 и VS2019, все это просто ничего не делало, не могу воспроизвестичастичная работа, упомянутая в вашем вопросе)

Есть ли простой способ сделать это из Visual Studio?

Вам нужно использовать команду nuget pack, чтобы сделать это, как говорит Lex Li . И чтобы сделать это в VS автоматически, вы можете подумать о настройке этой команды в Post-Build-Event или использовании пользовательской цели после сборки для запуска этой команды.

Так как вам нужны эти пакеты NuGetавтоматически упаковать из Visual Studio во время сборки выпуска. Вы можете попробовать добавить этот скрипт в ваш xx.csproj файл:

  <Target Name="CustomPack" AfterTargets="build" Condition="'$(Configuration)'=='Release'">
    <Message Text="Custom Pack command starts ..." Importance="high"/>
    <Exec Command="nuget pack $(MSBuildProjectFile) -Properties Configuration=Release"/>
  </Target>

Чтобы успешно запустить этот скрипт, вам нужно скачать nuget.exe и добавить его путь к Переменные среды . Или используйте полный путь, например "C:\SomePath\Nuget.exe" pack ...

Если сборка в режиме выпуска завершится успешно, вы увидите файл xx.nupkg в папке проекта.

Кроме того:

1.Для получения более подробной информации о команде nuget pack см. этот документ .

2. И не забудьте создать файл xx.nuspec в проектепапка, чтобы избежать появления предупреждений типа NU5115 (xxx не был указан). Подобную проблему смотрите здесь .

...