Как синхронизировать пакеты NuGet в нескольких общих проектах и ​​решениях?

Каков правильный метод синхронизации пакетов NuGet в нескольких общих проектах и ​​решениях в Visual Studio? Мы делимся более чем 200 проектами в нескольких решениях. Каждый ТРЕК имеет несколько решений, в которых есть некоторые или все проекты трека. У нас также есть несколько решений PLATFORM, которые включают несколько треков, а также любое количество проектов треков. К сожалению, у нас есть несколько поставщиков, которые РЕГУЛЯРНО выпускают обновления для своих пакетов, а разработчики непреднамеренно устанавливают/обновляют пакеты, работая в разных решениях. Нам нужно убедиться, что пакеты обновляются независимо от того, какое решение их использует.

К сожалению, на сайте NuGet обсуждается, как выполнить фактическое обновление, но не как все синхронизировать... http://docs.nuget.org/docs/start-here/Managing-NuGet-Packages-Using-The-Dialog#Updating_a_Package


person Ryan D'Baisse    schedule 08.03.2014    source источник
comment
См. соответствующий вопрос: stackoverflow.com/q/26792624/567493   -  person davidpricedev    schedule 07.07.2015


Ответы (3)


Это технически неправильно, что вы не можете этого сделать. Вы можете использовать встроенные инструменты в Visual Studio 2010/2012, чтобы сделать это за вас.

Чтобы обновлять пакеты во всех проектах одновременно, вы можете запустить диалоговое окно «Управление пакетами NuGet» на уровне решения.

Поэтому щелкните решение правой кнопкой мыши и выберите «Управление пакетами NuGet для решения». И вуаля! Ты ушел и ушел!

Теперь, хотя он не будет «синхронизировать» их автоматически, он позволяет вам видеть, где у вас есть дубликаты, и помогает вам перемещать каждый из ваших проектов в правильные версии пакетов nuget, которые вы хотите использовать.

Не панацея, но поможет.

person chris smith    schedule 09.07.2014

К сожалению, нет действительно хорошего способа сделать это. Мы запускаем собственный репозиторий NuGet. Когда мы хотим принудительно обновить пакет, мы полностью удаляем старую версию и загружаем новую.

Конечно, это не гарантирует, что разработчики извлекут последний пакет, поэтому мы сделали частью нашего процесса CI автоматическое извлечение всех пакетов NuGet в решение перед сборкой, поэтому, если какой-либо пакет обновлен, а разработчики не догнали, их следующая фиксация приведет к сбою сборки CI, что заставит их исправить это.

Это своего рода обходной путь, но это лучшее, что мы смогли придумать.

person XeroxDucati    schedule 08.03.2014

Все версии Nuget в решении можно хранить в одном файле .props. Однако эта процедура требует выполнения некоторых шагов вручную. Я видел, как этот подход частично использовался в проекте dotnet/cli на github:

  1. Создайте новый файл с расширением .props, например: Versions.props.

  2. Для каждого пакета в вашем решении (во всех проектах) создайте свойство с соответствующей версией (используйте диапазоны версий возможны)

<Project>
  <PropertyGroup>
    <log4netVersion>2.0.8</log4netVersion>
    <UnityVersion>5.9.*</UnityVersion>
  </PropertyGroup>
</Project>
  1. Импортируйте файл .props в каждый файл .cspoj.
<Import Project=".\version.props" />
  1. Замените номера версий в файлах .cspoj соответствующим свойством из файла .props.
<ItemGroup>
    <PackageReference Include="Unity" Version="$(UnityVersion)" />
    <PackageReference Include="log4net" Version="$(log4netVersion)" />   
</ItemGroup>

Как описано выше, эту процедуру необходимо выполнять вручную. Установка пакетов nuget с помощью диспетчера пакетов nuget перезаписывает свойства версии!

  1. Запустите dotnet restore для решения, чтобы обновить все пакеты, и dotnet list package, чтобы вывести список всех запрошенных и разрешенных пакетов для каждого проекта!

*введите здесь описание изображения*

person wmorian    schedule 17.05.2019