Вопросы и ответы по NuGet

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

Общие

Что необходимо для запуска NuGet?

Все данные по пользовательскому интерфейсу и средствам командной строки доступны в руководстве по установке.

Поддерживает ли NuGet Mono?

Средство командной строки nuget.exe выполняет построение и запускается с помощью Mono 3.2 или более поздней версии и поддерживает создание пакетов в Mono.

Несмотря на то, что nuget.exe полностью работает в Windows, в Linux и OS X существуют известные проблемы. См. раздел GitHub, посвященный проблемам с Mono.

Графический клиент доступен в виде надстройки для MonoDevelop.

Как можно определить, что содержит пакет, и является ли он стабильным и полезным для моего приложения?

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

Дополнительные сведения см. в разделе Поиск и выбор пакетов.

NuGet в среде Visual Studio

Каким образом обеспечивается поддержка NuGet в различных продуктах Visual Studio?

Как определить точную версию устанавливаемых средств NuGet?

В Visual Studio используйте команду "Справка > о Microsoft Visual Studio" и просмотрите версию, отображаемую рядом с диспетчер пакетов NuGet.

Кроме того, запустите консоль диспетчер пакетов (инструменты > NuGet диспетчер пакетов диспетчер пакетов > консоль) и введите $host сведения о NuGet, включая версию.

Какие языки программирования поддерживает NuGet?

NuGet обычно работает с языками платформы .NET и предназначен для использования библиотек .NET в проекте. Поскольку для проектов некоторых типов также поддерживаются средства автоматизации MSBuild и Visual Studio, в определенной степени также поддерживаются другие проекты и языки.

Последняя версия NuGet поддерживает C#, Visual Basic, F#, WiX, C++и Q#.

Какие шаблоны проектов поддерживает NuGet?

NuGet обеспечивает полную поддержку множества шаблонов проектов, включая Windows, Интернет, облако, SharePoint, Wix и другие.

Как обновить пакеты, которые являются частью шаблонов Visual Studio?

Перейдите на вкладку Обновления в пользовательском интерфейсе диспетчера проектов и выберите Обновить все или воспользуйтесь командой Update-Package в консоли диспетчера проектов.

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

Можно ли использовать NuGet вне среды Visual Studio?

Да. NuGet работает непосредственно из командной строки. См. руководство по установке и справочник по интерфейсу командной строки.

Командная строка NuGet

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

См. руководство по установке. Чтобы проверить текущую установленную версию средства, выполните команду nuget help.

Для чего нужна лицензия на веб-сайте nuget.exe?

Вы можете распространить nuget.exe в соответствии с условиями лицензии MIT. Вы несете ответственность за обновление и обслуживание всех распространяемых вами копий nuget.exe.

Можно ли расширить возможности средства командной строки NuGet?

Да, можно добавить пользовательские команды nuget.exeв , как описано в публикации Rob Reynold, доступной через Archive.org.

Консоль диспетчера пакетов NuGet (Visual Studio для Windows)

Как получить доступ к объекту DTE в консоли диспетчера пакетов?

Объект верхнего уровня в объектной модели автоматизации Visual Studio называется объектом DTE (среда средств разработки). Этот объект предоставляется консолью с помощью переменной $DTE. Дополнительные сведения см. в разделе Общие сведения о модели автоматизации в документации по расширению среды Visual Studio.

При попытке привести переменную $DTE к типу DTE2 возникает ошибка: "Не удается преобразовать значение "EnvDTE.DTEClass" типа "EnvDTE.DTEClass" в тип "EnvDTE80.DTE2"". Что я делаю не так?

Это известная проблема, связанная с взаимодействием PowerShell с COM-объектом. Попробуйте сделать следующее.

`$dte2 = Get-Interface $dte ([EnvDTE80.DTE2])`

Get-Interface — это вспомогательная функция, добавляемая узлом PowerShell NuGet.

Создание и публикация пакетов

Как включить мой пакет в веб-канал?

У меня есть несколько версий библиотеки, предназначенных для различных версий платформы .NET Framework. Как построить единый пакет, поддерживающий такую реализацию?

Как настроить свой собственный репозиторий или веб-канал?

Как выполнить массовую загрузку пакетов в мой веб-канал NuGet?

Работа с пакетами

Можно ли устанавливать пакеты NuGet без подключения к Интернету?

Да. См. статью блога Скотта Ханселмана (Scott Hanselman), посвященную доступу к NuGet при неработающем веб-сайте nuget.org или во время полета на самолете (hanselman.com).

Можно ли устанавливать пакеты в папку, отличную от заданной по умолчанию?

Задайте параметр repositoryPath в файле Nuget.Config, используя nuget config -set repositoryPath=<path>.

Как избежать добавления папки пакетов NuGet в систему управления версиями?

Присвойте свойству disableSourceControlIntegration в файле Nuget.Config значение true. Этот ключ работает на уровне решения и поэтому должен добавляться в файл $(Solutiondir)\.nuget\Nuget.Config. Если включить восстановление пакета из Visual Studio, этот файл будет создан автоматически.

Как отключить восстановление пакетов?

Почему при установке локального пакета с удаленными зависимостями возникает ошибка "Не удается разрешить зависимость"?

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

У меня есть несколько проектов, расположенных в одной папке. Как использовать отдельные файлы packages.config для каждого проекта?

В большинстве случаев, когда отдельные проекты располагаются в отдельных папках, это не проблема, поскольку NuGet идентифицирует файлы packages.config в каждом проекте. Если вы работаете с NuGet версии 3.3 или более поздней и размещаете несколько проектов в одной папке, вы можете вставить имя проекта в имена файлов packages.config, используя шаблон packages.{project-name}.config. NuGet будет использовать этот файл.

Это также не проблема при использовании PackageReference, поскольку каждый файл проекта содержит собственный список зависимостей.

Я не вижу nuget.org в списке репозиториев. Как вернуть его?

  • Добавьте https://api.nuget.org/v3/index.json в список источников или
  • Удалите файл %appdata%\.nuget\NuGet.Config (Windows) или ~/.nuget/NuGet/NuGet.Config (Mac/Linux) и дождитесь, пока NuGet снова создаст его.

Я перенесен в PackageReference, почему сбой сборки : "Этот проект ссылается на пакеты NuGet, отсутствующие на этом компьютере."

Когда в проектах packages.config устанавливался пакет с целевыми объектами или свойствами build, NuGet добавлял целевой объект EnsureNuGetPackageBuildImports для проверки, что содержимое msbuild пакетов было импортировано перед сборкой. Если target был изменен вручную, NuGet, возможно, не удается обнаружить, что при миграции его необходимо удалить.

Если ваш проект — PackageReference, и этот целевой объект еще присутствует в файле проекта, его следует удалить.