Как переустановить nuget в visual studio

Обновлено: 04.07.2024

У меня есть решение с несколькими проектами. Большинство сторонних ссылок отсутствует, но для каждого проекта есть файл packages.config . Как заставить NuGet установить / обновить все необходимые пакеты? Нужно ли это делать с помощью командной строки для каждого проекта?

Вы можете использовать nuget.exe для восстановления своих пакетов или с установленным NuGet 2.7 или выше, вы можете просто скомпилировать ваше решение в Visual Studio, которое также восстановит недостающие пакеты.

Для NuGet.exe вы можете выполнить следующую команду для каждого проекта.

Оба они снимут пакеты. Однако файлы вашего проекта не будут изменены при запуске этой команды, поэтому в проекте уже должна быть ссылка на пакеты NuGet. Если это не так, вы можете использовать Visual Studio для установки пакетов.

При использовании NuGet 2.7 и более поздних версий Visual Studio автоматически восстанавливает отсутствующие пакеты NuGet при построении решения, поэтому использование NuGet.exe не требуется.

Чтобы обновить все пакеты в вашем решении, сначала восстановите их, а затем вы можете либо использовать NuGet.exe для обновления пакетов, либо из Visual Studio вы можете обновить пакеты из окна консоли диспетчера пакетов, или, наконец, вы можете использовать управление Диалог пакетов.

Обратите внимание, что при этом не будут запускаться сценарии PowerShell в каких-либо пакетах NuGet.

Вы также можете ограничить это одним проектом.

Если вы хотите переустановить пакеты до тех же версий, которые были установлены ранее, вы можете использовать аргумент -reinstall с командой Update-Package .

Вы также можете ограничить это одним проектом.

Параметр -reinstall сначала удалит, а затем снова установит пакет в проект.

Или вы можете обновить пакеты с помощью диалогового окна Manage Packages .

Обновления:

  • 2013/07/10 - обновлена ​​информация о восстановлении nuget в NuGet 2.7.
  • 2014/07/06 - обновлена ​​информация об автоматическом восстановлении пакетов в Visual Studio и обновлен ответ с другими изменениями в NuGet.
  • 2014/11/21 - Обновлено с информацией о -reinstall

В Visual Studio 2017 - при компиляции с использованием IDE - все недостающие пакеты nuget будут загружены и сохранены в папке «пакеты».

Но на сборочной машине компиляция производилась с помощью msbuild.exe. В этом случае я скачал nuget.exe.

Во время каждого процесса сборки перед запуском msbuild.exe. Он выполнит -> nuget.exe восстановит NAME_OF_SLN_File (если есть только один файл .SLN, вы можете игнорировать этот параметр).

Не знаю, с каких пор, но в VS2019 это можно сделать проще:

  1. решение, щелкнув правой кнопкой мыши в обозревателе решений
  2. выберите Управление пакетами Nuget для решения
  3. есть 4 вкладки: Обзор, Установлено, Обновления, Объединить.
  4. Consolidate показывает, есть ли какие-либо проекты, использующие разные версии пакетов (и в большинстве случаев именно поэтому мы хотим обновить все пакеты)
  5. Обновления показывают, есть ли какие-либо обновления в ЛЮБЫХ проектах. Выберите все и нажмите «Обновить», работа будет выполнена.

Я знаю, что это старый пост, но подумал, что это может быть полезно. Если вам необходимо игнорировать определенные пакеты во время процесса обновления (например, любые пакеты, которые обновляют ссылки JavaScript), используйте следующий сценарий PowerShell (убедитесь, что для источника вашего пакета установлено значение «Все» в консоли диспетчера пакетов):

РЕДАКТИРОВАТЬ 2014-09-25 10:55 AM EST - Исправлена ​​ошибка в скрипте.

В VS2012 V11, если я использую «-Reinstall» в конце строки, это не сработает.

Поэтому я просто использовал:

Теперь консоль диспетчера пакетов Nuget в Visual Studio 2012 автоматически дает вам кнопку «Восстановить», как только обнаруживает, что какой-либо пакет не установлен, но находится в package.config. Отличная особенность!

Я пробовал Update-Package -reinstall , но он не работал с пакетом и остановил обработку всех оставшихся пакетов проектов в моем решении.

Я закончил свой сценарий, который перечисляет все файлы package.config и запускает Update-Package -Reinstall -ProjectName prj -Id pkg для каждого проекта / пакета.

Надеюсь, это может быть полезно для кого-то:

Изменить: Это ошибка, которая у меня была: Update-Package: не удалось найти пакет EntityFramework.BulkInsert-ef6. Перед установкой или обновлением необходимо восстановить существующие пакеты. Ручной запуск Update-Package -Reinstall -ProjectName my_prj -Id EntityFramework.BulkInsert-ef6 работал очень хорошо.

Для тех, кто прибыл сюда из-за того, что сервер сборки не справился с этим, вы можете создать цель MSBuild, запустив команду exec для запуска команды nuget restore , как показано ниже (в этом случае nuget.exe находится в .nuget, а не по пути), который затем можно запустить на этапе сборки TeamCity непосредственно перед сборкой решения.

Я считаю, что первое, что вам нужно сделать, это включить функцию восстановления пакета. См. Также здесь. Это делается на уровне решения (а не проекта).

Но это не поможет вам полностью - я столкнулся с аналогичной проблемой после включения функции восстановления. (VS2013, NuGet 2.8.)

Оказалось, что я (непреднамеренно) передал пакеты в систему управления версиями, когда зафиксировал проект - но Visual Studio (и плагин системы управления версиями) услужливо проигнорировали двоичные файлы при выполнении возврата.

Проблема возникла, когда я создал ветку релиза. В моей локальной копии ветки dev / main / trunk были двоичные файлы, потому что я изначально установил / загрузил пакеты.
Однако в новой ветке выпуска

  • все папки пакета и файлы .nupkg были там, поэтому NuGet не думал, что нужно что-то восстанавливать;
  • но в то же время ни одна из DLL не присутствовала, т.е. отсутствовали сторонние ссылки, поэтому я не мог собрать.

Я удалил все папки пакетов в $(SolutionDir)/packages (в ветке выпуска), а затем выполнил полную перестройку, и на этот раз сборка прошла успешно.
. а затем, конечно, я вернулся и удалил папки пакетов из системы управления версиями (в ветке ствола и выпуска). Я (пока) не знаю, следует ли удалять и файл repositories.config .

Многие из компонентов, устанавливаемых для вас шаблонами проектов - по крайней мере, для веб-проектов - являются пакетами NuGet. То есть эта проблема не ограничивается добавленными вами пакетами.
Поэтому включите восстановление пакета сразу после создания проекта / решения и перед выполнением начальной регистрации очистите папку packages (и убедитесь, что вы зафиксировали папку .nuget в системе управления версиями).

Отказ от ответственности: я видел здесь еще один ответ на SO, который указывал, что очистка папки packages была частью решения. Это поставило меня на правильный путь, поэтому я хотел бы отдать должное автору, но я больше не могу найти этот вопрос / ответ. Я опубликую правку, если наткнусь на нее.

Также отмечу, что Update-Package -reinstall изменит файлы .sln и .csproj / .vbproj . По крайней мере, так было в моем случае. Что ИМХО делает этот вариант менее привлекательным.

После 3 часов поиска и расследования.

У меня были проблемы с этим, потому что у нас есть два члена в команде (с использованием системы управления версиями GitHub), потому что мы не ограничивали файлы для пакетов для отправки в удаленный репозиторий, один из членов команды отправлял пакеты на сервер, и я получил эти изменения в мой местный.

После этого у меня возникла та же проблема, что и у PO, также я не смог опубликовать свой проект API на сервере.

В и я только что использовал

Update-Package -Reinstall - запустите эту команду в консоли диспетчера пакетов.

Эта команда переустановит все ваши пакеты, которые вы использовали в своем решении. (Для каждого проекта)

Переустановите все пакеты во ВСЕХ ПРОЕКТАХ текущего решения:

Update-Package -ProjectName 'NameOfProject' -Reinstall - запустите эту команду в консоли диспетчера пакетов.

Эта команда переустановит все ваши пакеты, связанные с проектом, который вы указали после «-ProjectName». И я думаю, что это лучше, потому что мне пришлось ждать полчаса, чтобы переустановить все пакеты в решении.

За это большое спасибо Родольфо Броку.

Кроме того, я бы порекомендовал вам, когда вы получаете изменения с удаленного сервера, нажимать кнопку «Восстановить пакеты», которая будет отображаться Visual Studio.

Если вы устанавливаете Nuget 2.8, установите флажок

В Visual Studio. Если он отмечен, то просто перестройте проект, чтобы восстановить все ваши справочные библиотеки.

Консоль диспетчера пакетов NuGet позволяет использовать команды PowerShell NuGet для поиска, установки, удаления и обновления пакетов NuGet. Это удобно, когда пользовательский интерфейс диспетчера пакетов не позволяет выполнять операции. См. подробнее об использовании CLI nuget.exe в консоли.

Консоль встроена в Visual Studio для Windows. Она не включена в Visual Studio для Mac и Visual Studio Code.

Перечисленные здесь команды относятся только к консоли диспетчера пакетов в Visual Studio и отличаются от команд модуля "Управление пакетами", доступных в общей среде PowerShell. В частности, в каждой среде есть команды, недоступные в другой среде, а в командах с тем же именем могут отличаться некоторые аргументы. При использовании консоли "Управление пакетами" в Visual Studio применяются команды и аргументы, описанные в этой статье.

Поиск и установка пакета

Для поиска и установки пакета необходимо выполнить три простых шага:

Откройте проект или решение в Visual Studio, а затем откройте консоль, щелкнув Средства > Диспетчер пакетов NuGet > Консоль диспетчера пакетов.

Найдите пакет, который требуется установить. Если вы уже знакомы с этим процессом, перейдите к шагу 3.

Выполните команду установки:

Все операции, доступные в консоли, также можно выполнить с помощью CLI NuGet. Но команды консоли работают в контексте Visual Studio и сохраненного проекта или решения, и область их применения часто шире, чем у их эквивалентов в CLI. Например, при установке пакета с помощью консоли добавляется ссылка на проект, а при использовании команды CLI этого не происходит. По этой причине разработчики, работающие в Visual Studio, обычно предпочитают использовать консоль вместо CLI.

Открытие консоли и элементов управления консоли

Откройте консоль в Visual Studio, щелкнув Средства > Диспетчер пакетов NuGet > Консоль диспетчера пакетов. Консоль — это окно Visual Studio, которое может быть упорядочено и размещено по вашему усмотрению (см. руководство по настройке макетов окон в Visual Studio).

По умолчанию команды консоли работают с конкретным источником пакета и проектом, как указано в элементе управления в верхней части окна.

Элементы управления консоли диспетчера пакетов для источника пакета и проекта

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

Чтобы управлять источниками пакетов, щелкните значок шестеренки. Это ярлык для диалогового окна Средства > Параметры > Диспетчер пакетов NuGet > Источники пакетов, как описано на странице, посвященной пользовательскому интерфейсу диспетчера пакетов. Кроме того, элемент управления справа от средства выбора проектов очищает содержимое консоли.

Параметры консоли диспетчера пакетов и элементы очистки

Элемент управления для прерывания выполнения в консоли диспетчера пакетов

Установка пакета

При установке пакета в консоли выполняются те же действия, которые описаны в руководстве по установке пакета NuGet, со следующими дополнениями:

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

Удаление пакета

См. подробнее об Uninstall-Package. Если необходимо найти идентификатор, чтобы просмотреть все пакеты, установленные в проекте по умолчанию, используйте команду Get-Package.

При удалении пакета выполняются следующие действия:

  • Удаляются ссылки на пакет из проекта (и любого используемого формата управления). Ссылки больше не отображаются в обозревателе решений (возможно, потребуется перестроить проект, чтобы он был удален из папки Bin).
  • Отменяются все изменения, внесенные в app.config или web.config при установке пакета.
  • Удаляются ранее установленные зависимости, если остальные пакеты не используют эти зависимости.

Обновление пакета

Поиск пакета

См. подробнее о Find-Package. В Visual Studio 2013 и более ранних версиях используйте команду Get-Package.

Доступность консоли

Консоль диспетчера пакетов сейчас недоступна в Visual Studio для Mac. Но аналогичные команды доступны через CLI NuGet. В Visual Studio для Mac есть пользовательский интерфейс для управления пакетами NuGet. См. подробнее о включении пакета NuGet в проект.

Консоль диспетчера пакетов не входит в Visual Studio Code.

Расширение консоли диспетчера пакетов

Установка и использование MvcScaffold

Настройка профиля PowerShell NuGet

Профиль PowerShell позволяет сделать часто используемые команды доступными при использовании PowerShell. NuGet поддерживает профиль NuGet, который обычно находится в следующем расположении:

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

Есть вариант пользовательского интерфейса, который я бы хотел использовать:

enter image description here

Когда я его использую, он открывает свойства решения на вкладке «Свойства».

Это его настройки:

enter image description here

Когда я пытаюсь использовать Очистить кеш пакетов NuGet , я получаю следующее необработанное исключение:

enter image description here

Поскольку есть более старые ссылки, если я использую команду Update-Package -reinstall , каждый пакет будет обновлен до последней версии (если я не сделаю это один за другим . для каждого из 47 пакетов . )

Я удалил папку .nuget, и после восстановления она остается пустой.

2 ответа

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

Вы можете сделать это, выбрав Инструменты-> Настройки импорта и экспорта , а затем выбрав Сбросить все настройки . Есть возможность сохранить текущие настройки в качестве резервной копии, но я не сохранил их из-за предполагаемого поврежденного состояния.

enter image description here

Кажется, это ядерный вариант , но он сработал.

Проверьте, есть ли в проекте из github файл с именем packages.config , если да, то это подтверждает, что проект использует packages.config для управления пакетами nuget.

Если в проекте использовался packages.config формат управления nuget для управления пакет и просто удалите папку .nuget , затем перестройте свой проект, он не восстановил пакеты в папке .nuget . Он фактически ссылается на пакеты из папки packages в папке решения.

enter image description here

Итак, вам также следует удалить папку packages из папки решения, а затем перестроить проект. Затем пакеты будут восстановлены в папке .nuget (это особенность packages.config ).

Если это не работает и для обработки ошибки, показанной на скриншоте, попробуйте следующие предложения:

Предложение

enter image description here

Также проверьте, есть ли у вас файл nuget.config в папке решения или над папкой, и если да, проверьте, есть ли у него ключ с именем globalPackagesFolder.

Удалите его напрямую, а затем перезапустите проект.

Более подробную информацию вы можете найти в эту ссылку.

2) закройте VS, удалите глобальный файл nuget.config в C:\Users\xxx(current user name)\AppData\Roaming\NuGet .

Также удалите скрытую папку .vs в папке решения, bin и obj папку и перезапустите VS, чтобы регенерировать файл nuget.config .

3) отключите все сторонние расширения в разделе Расширения Управление расширениями .

4) Если есть какие-либо обновления для VS, обновите их.

С помощью пользовательского интерфейса диспетчера пакетов NuGet в Visual Studio вы можете легко устанавливать, удалять и обновлять пакеты NuGet в проектах и решениях в ОС Windows. Если вы используете Visual Studio для Mac, см. руководство по включению пакета NuGet в проект. Пользовательский интерфейс диспетчера пакетов не входит в Visual Studio Code.

Поиск и установка пакета

В обозревателе решений щелкните правой кнопкой мыши Ссылки или сам проект и выберите Управление пакетами NuGet.

Пункт меню "Управление пакетами NuGet"

На вкладке Обзор по популярности отображаются пакеты из выбранного в данный момент источника (см. подробнее об источниках пакетов). Выполните поиск определенного пакета с помощью поля поиска в левом верхнем углу. Выберите пакет в списке, чтобы отобразить сведения о нем. Это также активирует кнопку Установить и раскрывающийся список для выбора версии.

Вкладка "Обзор" в диалоговом окне "Управление пакетами NuGet"

Выберите нужную версию в раскрывающемся списке и щелкните Установить. Visual Studio установит пакет и его зависимости в проект. Может появиться запрос на принятие условий лицензионного соглашения. После завершения установки добавленные пакеты отобразятся на вкладке Установленные. Пакеты также перечислены в узле Ссылки обозревателя решений. Это значит, что их можно указывать в проекте с помощью инструкций using .

Ссылки в обозревателе решений

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

Удаление пакета

В обозревателе решений щелкните правой кнопкой мыши Ссылки или сам проект и выберите Управление пакетами NuGet.

Откройте вкладку Установленные.

Выберите пакет для удаления (при необходимости используйте поиск, чтобы отфильтровать список) и щелкните Удалить.

Удаление пакета

Обратите внимание, что элементы управления Включить предварительные версии и Источник пакета не применяются при удалении пакетов.

Обновление пакета

В обозревателе решений щелкните правой кнопкой мыши Ссылки или сам проект и выберите Управление пакетами NuGet. (В проектах веб-сайтов щелкните правой кнопкой мыши папку Bin.)

Перейдите на вкладку Обновления, чтобы просмотреть пакеты, для которых доступны обновления из выбранных источников пакетов. Выберите Включить предварительные версии, чтобы включить предварительные версии пакетов в список обновлений.

Последовательно выберите пакет для обновления и нужную версию в раскрывающемся списке справа, а затем щелкните Обновить.

Обновление пакета

Пример пакета, отмеченного как неявная ссылка или AutoReferenced

Чтобы обновить несколько пакетов до последних версий, выберите их в списке и нажмите кнопку Обновить, расположенную над списком.

Кроме того, можно обновить отдельный пакет на вкладке Установленные. В этом случае сведения о пакете будут содержать средство выбора версии (зависит от параметра Включить предварительные версии) и кнопку Обновить.

Управление пакетами для решения

Управление пакетами для решения — это удобный способ одновременно работать с несколькими проектами.

Выберите команду меню Средства > Диспетчер пакетов NuGet > Управление пакетами NuGet для решения или щелкните правой кнопкой мыши решение и выберите Управление пакетами NuGet.

Управление пакетами NuGet для решения

При управлении пакетами для решения пользовательский интерфейс позволяет выбрать проекты, затрагиваемые операциями.

Выбор проекта при управлении пакетами для решения

Вкладка "Консолидация"

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

Вкладка "Консолидация" пользовательского интерфейса диспетчера пакетов

В этом примере проект ClassLibrary1 использует EntityFramework 6.2.0, а ConsoleApp1 использует EntityFramework 6.1.0. Для консолидации версий пакета сделайте следующее:

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

Источники пакетов

Чтобы изменить источник, из которого Visual Studio получает пакеты, выберите его в средстве выбора источника.

Средство выбора источника пакетов в пользовательском интерфейсе диспетчера пакетов

Для управления источниками пакетов сделайте следующее:

Щелкните значок Параметры в пользовательском интерфейсе диспетчера пакетов, как показано ниже, или выберите Средства > Параметры и прокрутите до пункта Диспетчер пакетов NuGet.

Значок параметров пользовательского интерфейса диспетчера пакетов

Выберите узел Источники пакетов.

Параметры источников пакетов

Чтобы добавить источник, выберите + , измените имя, введите URL-адрес или путь в элементе управления Источник и щелкните Обновить. Источник отобразится в раскрывающемся списке для выбора.

Чтобы изменить источник пакета, выберите его, внесите изменения в поля Имя и Источник и щелкните Обновить.

Чтобы отключить источник пакета, снимите флажок слева от имени в списке.

Чтобы удалить источник пакета, выберите его и нажмите кнопку X.

Использование кнопок со стрелками вверх и вниз не меняет приоритетный порядок источников пакетов. Visual Studio игнорирует порядок источников пакетов, используя пакет из любого источника, первым ответившего на запросы. См. подробнее о восстановлении пакетов.

Если источник пакета появляется после удаления, он может быть указан в файлах NuGet.Config уровня компьютера или уровня пользователя. Чтобы определить расположение этих файлов, см. описание распространенных конфигураций NuGet. Затем удалите источник, отредактировав файлы вручную или с помощью команды nuget sources.

Элемент управления "Параметры" диспетчера пакетов

Если пакет выбран, пользовательский интерфейс диспетчера пакетов отображает небольшой развертываемый элемент управления Параметры под средством выбора версий (показан в свернутом и развернутом виде). Обратите внимание, что для некоторых типов проектов предоставляется только параметр Показать окно предварительного просмотра.

Параметры диспетчера пакетов

Эти параметры объясняются в следующих разделах.

Показать окно предварительного просмотра

При выборе этого параметра модальное окно отображает зависимости выбранного пакета перед его установкой.

Пример диалогового окна предварительного просмотра

Параметры установки и обновления

(доступно не для всех типов проектов)

Поведение зависимости — указывает способ определения устанавливаемых версий зависимых пакетов в NuGet.

  • Игнорировать зависимости — пропускает установку зависимостей, что обычно приводит к прерыванию установки пакета.
  • Наименьший [по умолчанию] — устанавливает зависимость с минимальным номером версии, соответствующим требованиям основного выбранного пакета.
  • Наибольший номер исправления — устанавливает версию с теми же основными и дополнительными номерами версий, но с самым большим номером исправления. Например, если указана версия 1.2.2, будет установлена самая высокая версия, которая начинается с 1.2.
  • Наибольший номер дополнительной версии — устанавливает версию с тем же основным номером версии, но с самым большим номером дополнительной версии и номером исправления. Если указана версия 1.2.2, будет установлена самая высокая версия, которая начинается с 1.
  • Наибольший — устанавливает самую высокую доступную версию пакета.

Действие при конфликте файлов — указывает, как в NuGet должны обрабатываться пакеты, которые уже существуют в проекте или на локальном компьютере.

  • По приглашению — NuGet спрашивает, следует ли сохранять или перезаписывать существующие пакеты.
  • Пропустить все — NuGet пропускает перезапись существующих пакетов.
  • Перезаписать все — NuGet перезаписывает существующие пакеты.

Параметры удаления

(доступно не для всех типов проектов)

Удалить зависимости — удаляются все зависимые пакеты, если на них нет ссылок в других местах проекта.

Принудительно удалить, даже если есть зависимости от него — пакет удаляется, даже если на него по-прежнему есть ссылка в проекте. Обычно используется в сочетании с удалением зависимостей для удаления пакета и любых установленных зависимостей. Но использование этого параметра может привести к нарушению ссылок в проекте. В таких случаях может потребоваться переустановить другие пакеты.

Читайте также: