2017-01-05 3 views
3

Я работаю над большим решением, которое состоит из более 250 проектов. Обновление общего пакета Nuget, используемого во всех этих проектах, занимает от 2 до 3 часов при использовании интерфейса Visual Studio Nuget или инструмента командной строки Nuget. Я ищу способ сделать это быстрее, обновив файлы вручную.Как вручную обновить пакет Nuget без использования Nuget UI или инструмента командной строки

Моя первая мысль заключалась в том, что мне нужно было обновить номер версии пакета в файлекаждого проекта. Например, найти и заменить

<package id="ThisPackage" version="0.0.0.1" targetFramework="net452" /> 

с

<package id="ThisPackage" version="0.0.0.2" targetFramework="net452" /> 

Это, кажется, что на самом деле происходит, когда вы выполняете обновление через VS NuGet UI, так что я думал делать это, а затем восстановление решение будет принимать заботиться обо всем, немного как вручную редактировать зависимости в package.json, а затем запускать npm install в узле.

Это не работает. ссылки в файлах .csproj не обновляются по мере того, как вы делаете, когда файлы конфигурации обновляются Nuget.

Я мог бы вручную обновить .csproj файлы, а также, например, путем поиска и замены

<HintPath>..\..\packages\ThisPackage.0.0.0.1\ 

с

<HintPath>..\..\packages\ThisPackage.0.0.0.2\ 

Но, вероятно, я также необходимо обновить ссылки версии сборки и я m не уверен, как выработать то, что должно быть для данной версии пакета Nuget. Плюс в этот момент он становится немного неудобным и подверженным ошибкам, хотя и около получаса работы вместо 3 часов мертвого времени.

Кто-нибудь нашел способ обновить пакет Nuget по большому числу проектов в решении, которое не требует нескольких часов?

+0

Оказалось, что обновление пакетов с использованием Nuget cli намного быстрее, если вы сначала закроете Visual Studio. В моем случае это занимает около 5 минут. например 'nuget update -id Package.Id mysolution.sln' –

ответ

3

Время обновления пакета состоит из загрузки пакета и удаления/установки пакета. Действие по загрузке будет выполняться только один раз при первом скачивании, поэтому действие по удалению/установке займет почти все время обновления. Поэтому вы можете принять совет Килимана, чтобы сначала проверить производительность вашей машины.

Если вы хотите обновить все эти пакеты вручную в соответствии с вашими шагами.Вы можете выполнить следующие шаги, чтобы уменьшить время обновления:

  • Загрузите пакет обновления и поместите его в локальный репозиторий пакетов.
  • Распакуйте пакет, затем найдите ссылочные версии сборки. Или вы можете использовать инструмент NuGet Package Explorer для получения ссылочных версий сборки.
  • Пакет заменяет версию пакета во всем пакете.config
  • Пакет заменяет версию пакета и версию ссылочной сборки во всех файлах .csproj с помощью стороннего инструмента, такого как блокнот ++.
+0

Благодарим за упоминание Nuget explorer. Это выглядит очень полезно –

+0

Я написал сценарий Linqpad для автоматизации этого на основе шагов в ответе @Wendy - MSFT. Он находится на github в https://github.com/timbarclay/BulkNugetUpdater. На моем решении требуется от 10 до 15 секунд вместо 3 часов и, кажется, работает нормально –

0

Я бы не стал обновлять пакеты вручную, если только вы не используете .NET Core, который рассматривает пакеты NuGet как граждан первого класса.

В настоящее время слишком много происходит с загрузкой пакетов, обновлением ссылок на проекты и т. Д., Что это слишком подвергло ошибкам, чтобы попытаться сделать это самостоятельно.

Теперь, возможно, настоящий вопрос заключается в том, почему так долго требуется обновление пакетов. Вы добавили другие репозитории NuGet? Возможно, один из них тайм-аут.

Вы пробовали запустить Fiddler, чтобы узнать, есть ли посторонние сетевые запросы? Возникает ли проблема на всех машинах или только на конкретном? Являются ли они рабочими станциями разработчиков или серверами сборки?