Как автоматически обновить пакеты NuGet до последней доступной версии - PullRequest
38 голосов
/ 21 марта 2012

У меня есть два репозитория, и мне нужны скомпилированные библиотеки из одного репозитория в другом. Я не хочу вручную проверять repo1 на наличие обновленных библиотек и копировать / фиксировать в repo2, потому что это глупо. У меня есть repo1, который собирает пакеты NuGet для каждой сборки необходимых библиотек и публикует их на внутреннем сервере NuGet. Затем проекты в repo2 могут ссылаться на эти пакеты NuGet, и все (почти) работает.

Последнее препятствие для этого - автоматическое обновление пакетов NuGet в проектах repo2. Так как я не знаю, когда библиотеки в repo1 будут обновлены (и мне это не нужно было), я хотел бы иметь какое-то событие сборки проектов в repo2, которое автоматически обновит пакеты NuGet. В настоящее время у меня есть только событие предварительной сборки, но поскольку файлы packages.config содержат номер версии установленного пакета, я продолжаю получать измененные файлы в repo2 (файлы packages.config обновляются).

Итак, мой вопрос: каков хороший способ автоматического обновления пакетов NuGet без вреда для моей VCS repo2? ScottGu говорит Здесь (в комментариях), что можно подключить обновления пакетов до сборок CI, но он не указывает, как и мое текущее решение является грязным. Есть ли встроенный способ, по которому я скучаю? Или лучше обходные пути?

Ответы [ 4 ]

3 голосов
/ 22 марта 2012

Возможно, вы могли бы использовать функцию восстановления пакета NuGet (немного информации здесь: http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages)

При сборке проекта вызывается «nuget.exe -install» для переустановки пакетов из packages.config. Я не пробовал, но вы можете добавить команду Update в файл nuget.targets таким же образом. (Вам нужно вызвать обновление nuget.exe и установить существующий nuget.exe).

0 голосов
/ 05 июня 2019

В Visual Studio Tools-> Диспетчер пакетов Nuget -> Управление пакетами для решения -> Вкладка «Обновления»

Если есть обновления для установки, есть опция «Проверить все» с помощью кнопки «Обновить»

Update button

0 голосов
/ 09 декабря 2017

Это объясняет, как сделать это через MSBuild

http://netitude.bc3tech.net/2014/11/28/auto-update-your-nuget-packages-at-build-time/

<Target Name="UpdatePackages" DependsOnTargets="CheckPrerequisites">
   <Exec Command="$(UpdateCommand)"
      Condition="'$(OS)' != 'Windows_NT' And Exists('$(PackagesConfig)')" />

   <Exec Command="$(UpdateCommand)"
      LogStandardErrorAsError="true"
      Condition="'$(OS)' == 'Windows_NT' And Exists('$(PackagesConfig)')" />
</Target>


<!-- Commands -->
<UpdateCommand>$(NuGetCommand) update "$(PackagesConfig)" -source "$(PackageSources)" -id AutoUpdater $(NonInteractiveSwitch)</UpdateCommand>
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)"  $(NonInteractiveSwitch) $(RequireConsentSwitch) -solutionDir $(PaddedSolutionDir)</RestoreCommand>

<BuildCommand>$(NuGetCommand) pack "$(ProjectPath)" -Properties "Configuration=$(Configuration);Platform=$(Platform)" $(NonInteractiveSwitch) -OutputDirectory "$(PackageOutputDir)" -symbols</BuildCommand>

<!-- We need to ensure packages are restored prior to assembly resolve -->
<BuildDependsOn Condition="$(RestorePackages) == 'true'">
    RestorePackages;
    UpdatePackages;
    $(BuildDependsOn);
</BuildDependsOn>
0 голосов
/ 14 апреля 2015

Вы можете изменить ваш файл .cspoj для выполнения цели «BeforeBuild», например:

<Target Name="BeforeBuild">
  <Exec Command="&quot;$(SolutionDir).nuget\NuGet&quot; update &quot;$(ProjectDir)packages.config&quot; -Id your.package.id" />
</Target>

Обратите внимание: у вас должен быть "Nuget.exe" в каталоге ваших решений

...