Заметки о выпуске NuGet 2.7

Заметки о выпуске NuGet 2.6.1 для WebMatrix для Заметки | о выпуске NuGet 2.7.1

NuGet 2.7 выпущен 22 августа 2013 года.

Благодарности

Мы хотели бы поблагодарить следующие внешние участник за их значительный вклад в NuGet 2.7:

  1. [Mike Roth](http://www.codeplex.com/site/users/view/mxrss) (@mxrss)
    • Отображение URL-адреса лицензии при перечислении пакетов и подробных сведений.
  2. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph) (@adamralph)
    • [#1956](http://nuget.codeplex.com/workitem/1956) — Добавление атрибута packages.config developmentDependency в команду пакета и его использование для включения только пакетов среды выполнения
  3. [Rafael Nicoletti](http://www.codeplex.com/site/users/view/tkrafael) (@tkrafael)
    • Избегайте повторяющихся ключей свойств в команде пакета nuget.exe.
  4. [Ben Phegan](http://www.codeplex.com/site/users/view/benphegan) (@BenPhegan)
    • [#2610](http://nuget.codeplex.com/workitem/2610) — увеличьте размер кэша компьютера до 200.
  5. [Slava Trenogin](http://www.codeplex.com/site/users/view/derigel) (@derigel)
    • [#3217](http://nuget.codeplex.com/workitem/3217) — Диалоговое окно "Исправление NuGet", показывающее обновления на неправильной вкладке
    • Исправление Project.TargetFramework может иметь значение NULL в ProjectManager
    • [#3248](http://nuget.codeplex.com/workitem/3248) — исправление SharedPackageRepository FindPackage/FindPackagesById завершится ошибкой в несуществующем пакете
  6. [Kevin Boyle](http://www.codeplex.com/site/users/view/KevinBoyleRG) (@kevfromireland)
    • [#3234](http://nuget.codeplex.com/workitem/3234) — включение поддержки проекта Nomad
  7. [Corin Blaikie](http://www.codeplex.com/site/users/view/corinblaikie) (@corinblaikie)
    • [#3252](http://nuget.codeplex.com/workitem/3252) — Исправление ошибки команды push-отправки с кодом выхода 0, если файл не существует.
  8. [Martin Veselý](http://www.codeplex.com/site/users/view/veselkamartin)
    • [#3226](http://nuget.codeplex.com/workitem/3226) — Исправлена ошибка с помощью команды Add-BindingRedirect, когда проект ссылается на проект базы данных.
  9. [Miroslav Bajtos](http://www.codeplex.com/site/users/view/miroslavbajtos) (@bajtos)
    • [#2891](http://nuget.codeplex.com/workitem/2891)— Исправлена ошибка синтаксического анализа nuget.pack карта в атрибуте "исключить" неправильно.
  10. [Justin Dearing](http://www.codeplex.com/site/users/view/zippy1981) (@zippy1981)
    • [#3307](http://nuget.codeplex.com/workitem/3307) — Исправление ошибки NuGet.targets не передает $(Platform) в nuget.exe при восстановлении пакетов.
  11. [Brian Federici](http://www.codeplex.com/site/users/view/benerdin)
    • [#3294](http://nuget.codeplex.com/workitem/3294) — Исправлена ошибка в команде пакета nuget.exe, которая позволит добавлять файлы с тем же именем, но другим регистром, в конечном итоге вызывая исключение "Элемент уже существует".
  12. [Daniel Cazzulino](http://www.codeplex.com/site/users/view/dcazzulino) (@kzu)
    • [#2990](http://nuget.codeplex.com/workitem/2990) — добавьте свойство Version в класс NetPortableProfile.
  13. [David Simner](https://www.codeplex.com/site/users/view/DavidSimner)
    • [#3460](https://nuget.codeplex.com/workitem/3460) — Исправлена ошибка NULLReferenceException, если требуетсяApiKey = true, но заголовок X-NUGET-APIKEY не присутствует
  14. [Michael Friis](https://www.codeplex.com/site/users/view/friism) (@friism)
    • [#3278](https://nuget.codeplex.com/workitem/3278) — Исправляет файл целевых объектов NuGet.Build таким образом, чтобы он работал правильно в MonoDevelop
  15. [Pranav Krishnamoorthy](https://www.codeplex.com/site/users/view/pranavkm) (@pranav_km)
    • Повышение производительности команды restore путем увеличения параллелизации

Важные функции в выпуске

NuGet 2.7 представляет новый подход к восстановлению пакетов, а также преодолевает основные препятствия: согласие на восстановление пакетов теперь по умолчанию. Сочетание нового подхода и неявного согласия значительно упрощает сценарии восстановления пакетов.

В NuGet версии 2.0, 2.1, 2.2, 2.5 и 2.6 пользователи должны явно разрешить NuGet скачивать отсутствующие пакеты во время сборки. Если это согласие не было явно предоставлено, то решения, которые включили восстановление пакетов, не будут создаваться до тех пор, пока пользователь не предоставил согласие.

Начиная с NuGet 2.7, согласие на восстановление пакетов по умолчанию имеет значение ON, позволяя пользователям явно отказаться от восстановления пакета при необходимости, используя проверка box в параметрах NuGet в Visual Studio. Это изменение для неявного согласия влияет на NuGet в следующих средах:

  • Предварительная версия Visual Studio 2013
  • Visual Studio 2012
  • Visual Studio 2010
  • служебная программа командной строки nuget.exe

Автоматическое восстановление пакетов в Visual Studio

Начиная с NuGet 2.7 NuGet автоматически скачивает отсутствующие пакеты во время сборки в Visual Studio, даже если восстановление пакетов не было явно включено для решения. Это автоматическое восстановление пакетов происходит в Visual Studio при создании проекта или решения, но перед вызовом MSBuild. Это дает несколько существенных преимуществ:

  1. Больше не нужно использовать жест "Включить восстановление пакетов NuGet" в решении
  2. Проекты не нужно изменять, и NuGet не вносит изменения в проект, чтобы убедиться, что восстановление пакета включено
  3. Все пакеты NuGet, включая те, которые включали импорт MSBuild для файлов props/targets, будут восстановлены до вызова MSBuild, обеспечивая правильное распознавание этих реквизитов и целевых объектов во время сборки.

Чтобы использовать автоматическое восстановление пакетов в Visual Studio, необходимо выполнить только одно (в)действие:

  1. Не проверка в packages папке

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

Хотя все пользователи неявно отказались от автоматического восстановления пакетов, вы можете легко отказаться от использования параметров диспетчер пакетов в Visual Studio.

Package Manager Settings

Упрощенное восстановление пакета из командной строки

NuGet 2.7 представляет новую функцию для nuget.exe: nuget.exe restore

Эта новая команда восстановления позволяет легко восстановить все пакеты для решения с одной командой, принимая файл решения или папку в качестве аргумента. Кроме того, этот аргумент подразумевается, если в текущей папке существует только одно решение. Это означает, что все действия из папки, содержащей один файл решения (MySolution.sln):

  1. nuget.exe восстановления MySolution.sln
  2. nuget.exe восстановления.
  3. восстановление nuget.exe

Команда "Восстановить" откроет файл решения и найдет все проекты в решении. Оттуда он найдет packages.config файлы для каждого проекта и восстановит все найденные пакеты. Он также восстанавливает пакеты уровня решения, найденные .nuget\packages.config в файле. Дополнительные сведения о новой команде восстановления см. в справочнике по командной строке.

Рабочий процесс восстановления нового пакета

Мы рады внести эти изменения в восстановление пакетов, так как он представляет новый рабочий процесс. Если вы хотите не зафиксировать пакеты из системы управления версиями, просто не зафиксируйте папку packages . Пользователи Visual Studio, которые открывают и создают решение, будут автоматически восстановлены пакеты. Для сборок командной строки просто вызовите nuget.exe restore перед вызовом msbuild. Вам больше не нужно помнить, чтобы использовать жест "Включить восстановление пакетов NuGet" в решении, и нам больше не нужно изменять проекты для изменения сборки. Кроме того, это дает гораздо улучшенный интерфейс для пакетов, которые включают импорт MSBuild, особенно для импорта, добавленного с помощью недавней функции NuGet для автоматического импорта файлов props/targets из папки \build.

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

  • Team Foundation Service — они работают над интеграцией вызова в nuget.exe restore сценарии сборки по умолчанию.
  • Веб-сайты Windows Azure— они работают, чтобы вы могли отправить проект в Azure и nuget.exe restore вызвать его перед созданием веб-сайта.
  • TeamCity — они обновляют подключаемый модуль установщика NuGet для TeamCity 8.x
  • AppHarbor — они работают, чтобы разрешить отправлять репозиторий в AppHarbor и nuget.exe restore вызываться перед сборкой решения.

С каждым из указанных выше партнеров они будут использовать собственную копию nuget.exe, и вам не нужно будет носить nuget.exe в решении.

Известные проблемы

Существовали две известные проблемы с восстановлением nuget.exe с первоначальным выпуском 2.7, но они были исправлены 9.6.2013 с обновлением пакета NuGet.CommandLine. Это обновление также доступно в [NuGet 2.7 download page](https://nuget.codeplex.com/releases/view/107605) CodePlex. Выполнение nuget.exe update -self будет обновлено до последнего выпуска.

Исправлено:

  1. [New package restore doesn't work on Mono when using SLN file](https://nuget.codeplex.com/workitem/3596)
  2. [New package restore doesn't work with Wix projects](https://nuget.codeplex.com/workitem/3598)

Существует также известная проблема с новым рабочим процессом [Automatic Package Restore does not work for projects under a solution folder](https://nuget.codeplex.com/workitem/3625)восстановления пакета. Эта проблема устранена в NuGet 2.7.1.

Перенацеливание и обновление ошибок сборки и предупреждений проекта

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

Если мы обнаруживаем, что любой из пакетов пострадал от перенацеления или обновления, мы создадим немедленные ошибки сборки, чтобы сообщить вам об этом. Помимо немедленной ошибки сборки, мы также сохраняем requireReinstallation="true" флаг в packages.config файле для всех пакетов, затронутых перенацеливанием, и каждая последующая сборка в Visual Studio вызовет предупреждения о сборке для этих пакетов.

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

Параметры конфигурации NuGet по умолчанию

Многие компании используют NuGet внутри организации, но было трудно руководствовать своих разработчиков использовать внутренние источники пакетов вместо nuget.org. NuGet 2.7 представляет функцию по умолчанию конфигурации, которая позволяет указывать значения по умолчанию на уровне компьютера:

  1. Источники пакетов с поддержкой
  2. Зарегистрированные, но отключенные источники пакетов
  3. Источник отправки по умолчанию nuget.exe

Теперь каждый из них можно настроить в файле, расположенном по адресу %ProgramData%\NuGet\NuGetDefaults.Config. Если этот файл конфигурации указывает источники пакетов, то источник пакета по умолчанию nuget.org не будет зарегистрирован автоматически, и они NuGetDefaults.Config будут зарегистрированы вместо этого.

Хотя и не требуется использовать эту функцию, мы ожидаем, что компании будут развертывать NuGetDefaults.Config файлы с помощью групповой политики.

Обратите внимание, что эта функция никогда не приведет к удалению источника пакета из параметров NuGet разработчика. Это означает, что если разработчик уже использовал NuGet и для него зарегистрирован источник пакетов nuget.org, он не будет использован после создания файла NuGetDefaults.Config.

Дополнительные сведения об этой функции см. в разделе "Параметры конфигурации NuGet" по умолчанию .

Переименование источника пакета по умолчанию

NuGet всегда регистрировал источник пакета по умолчанию под названием "Официальный источник пакета NuGet", который указывает на nuget.org. Это имя было подробным, и он также не указал, где он на самом деле указывает. Чтобы устранить эти две проблемы, мы переименовали этот источник пакета, чтобы просто "nuget.org" в пользовательском интерфейсе. URL-адрес источника пакета также был изменен, чтобы включить префикс www.. После использования NuGet 2.7 существующий "официальный источник пакета NuGet" автоматически будет обновлен до "nuget.org" в качестве его имени и "https://www.nuget.org/api/v2/" в качестве URL-адреса.

Повышение производительности

Мы улучшили производительность в версии 2.7, что приведет к снижению объема памяти, уменьшению использования дисков и более быстрой установке пакета. Мы также сделали более умные запросы на веб-каналы на основе OData, что приведет к снижению общей полезной нагрузки.

Новые API расширяемости

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

IVsPackageInstallerServices

// Checks if a NuGet package with the specified Id and version is installed in the specified project.
bool IsPackageInstalledEx(Project project, string id, string versionString);

// Get the list of NuGet packages installed in the specified project.
IEnumerable<IVsPackageMetadata> GetInstalledPackages(Project project);

IVsPackageInstaller

// Installs one or more packages that exist on disk in a folder defined in the registry.
void InstallPackagesFromRegistryRepository(string keyName, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);

// Installs one or more packages that are embedded in a Visual Studio Extension Package.
void InstallPackagesFromVSExtensionRepository(string extensionId, bool isPreUnzipped, bool skipAssemblyReferences, Project project, IDictionary<string, string> packageVersions);

Зависимости только для разработки

Эта функция была добавлена Адамом Ральфом и позволяет авторам пакетов объявлять зависимости, которые использовались только во время разработки и не требуют зависимостей пакетов. Добавление атрибута developmentDependency="true" в packages.confignuget.exe pack пакет больше не будет включать этот пакет в качестве зависимостей.

Удалена поддержка Visual Studio 2010 Express для Windows Телефон

Новая модель восстановления пакетов в версии 2.7 реализована новым VSPackage, который отличается от основного ПАКЕТА VSPackage. Из-за технической проблемы этот новый VSPackage не работает правильно в Visual Studio 2010 Express для Windows Телефон SKU, так как мы совместно использовать ту же базу кода с другими поддерживаемыми номерами SKU Visual Studio. Поэтому начиная с NuGet 2.7, мы удаляем поддержку Visual Studio 2010 Express для Windows Телефон из опубликованного расширения. Поддержка Visual Studio 2010 Express для Интернета по-прежнему включена в основное расширение, опубликованное в коллекции расширений Visual Studio.

Так как мы не уверены, сколько разработчиков по-прежнему использует NuGet в этой версии или выпуске Visual Studio, мы публикуем отдельное расширение Visual Studio специально для этих пользователей и публикуем его в CodePlex (а не в коллекции расширений Visual Studio). Мы не планируем продолжать поддерживать это расширение, но если это влияет на вас, сообщите нам, задав вопрос на CodePlex.

Чтобы скачать диспетчер пакетов NuGet (для Visual Studio 2010 Express для Windows Телефон), посетите страницу[NuGet 2.7 Downloads](https://nuget.codeplex.com/releases/view/107605).

Исправления ошибок

Помимо этих функций, этот выпуск NuGet также включает множество других исправлений ошибок. В выпуске было решено 97 общих проблем. Полный список рабочих элементов, исправленных в NuGet 2.7, см. в разделе [NuGet Issue Tracker for this release](https://nuget.codeplex.com/workitem/list/advanced?release=NuGet%202.7&status=all).