Как автоматически обновлять пакеты NuGet до последней доступной версии

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

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

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

Будь осторожен. Библиотеки могут измениться и сломать ваше программное обеспечение. blog.heroku.com/archives/2011/6/28/   —  person themilkyninja    schedule 27.03.2012

Для этого и предназначен наш автоматизированный набор тестов :)   —  person themilkyninja    schedule 28.03.2012

@themilkyninja Вы когда-нибудь находили решение? Я столкнулся с той же проблемой.   —  person themilkyninja    schedule 25.03.2013

Неа. В итоге мы пропустили NuGet и сделали это вручную. Однако сейчас у нас есть до 4 разных зависимостей, поэтому мы собираемся снова настроить все элементы NuGet и просто вручную создавать пакеты, когда что-то изменится.   —  person themilkyninja    schedule 29.05.2013

См. также:  Как работать с семантическим управлением версиями в Jenkins

Так что, если … на одном из этапов сборки есть сценарий для анализа версии из фида пакета (например, this), а затем измените соответствующую версию пакета в package.config?   —  person themilkyninja    schedule 29.01.2021

docs.microsoft.com/en-us/ nuget / reference / cli-reference /   —  person themilkyninja    schedule 31.01.2021

Понравилась статья? Поделиться с друзьями:
IT Шеф
Комментарии: 3
  1. themilkyninja

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

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

    Я изучил это и восстановил пакеты только в папку пакетов уровня решения (а не в фактический проект). Я также не хочу проверять файлы в проекте, и ни nuget.exe update, ни nuget.ext install не возвращают все файлы обратно в проект. В основном я ищу эту функцию person themilkyninja; 28.03.2012

  2. themilkyninja

    Вы можете изменить свой файл .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» в каталоге вашего решения.

    Это не так просто, как добавить его на этапах перед сборкой. На самом деле это уже слишком поздно: stackoverflow.com/questions/15027256/ person themilkyninja; 13.09.2017

  3. themilkyninja

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

    https://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>
    
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: