Поделиться через


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

Заметки | о выпуске NuGet 2.7.2 NuGet 2.8.1

NuGet 2.8 выпущен 29 января 2014 г.

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

  1. [Llewellyn Pritchard](https://www.codeplex.com/site/users/view/leppie) (@leppie)
    • [#3466](https://nuget.codeplex.com/workitem/3466) — при упаковке пакетов проверьте идентификатор пакетов зависимостей.
  2. [Maarten Balliauw](https://www.codeplex.com/site/users/view/maartenba) (@maartenballiauw)
    • [#2379](https://nuget.codeplex.com/workitem/2379) — удалите суффикс $metadata при сохранении учетных данных веб-канала.
  3. [Filip De Vos](https://www.codeplex.com/site/users/view/FilipDeVos) (@foxtricks)
    • [#3538](http://nuget.codeplex.com/workitem/3538) — поддержка указания файла проекта для команды обновления nuget.exe.
  4. [Juan Gonzalez](https://www.codeplex.com/site/users/view/jjgonzalez)
    • [#3536](http://nuget.codeplex.com/workitem/3536) — Маркеры замены не передаются с помощью -IncludeReferencedProjects.
  5. [David Poole](https://www.codeplex.com/site/users/view/Sarkie) (@Sarkie_Dave)
    • [#3677](http://nuget.codeplex.com/workitem/3677) — исправление nuget.push, вызывающее исключение OutOfMemoryException при отправке большого пакета.
  6. [Wouter Ouwens](https://www.codeplex.com/site/users/view/Despotes)
    • [#3666](http://nuget.codeplex.com/workitem/3666) — Исправлен неправильный целевой путь, если проект ссылается на другой проект CLI/C++.
  7. [Adam Ralph](http://www.codeplex.com/site/users/view/adamralph) (@adamralph)
    • [#3639](https://nuget.codeplex.com/workitem/3639) — Разрешить установку пакетов в качестве зависимостей разработки по умолчанию
  8. [David Fowler](https://www.codeplex.com/site/users/view/dfowler) (@davidfowl)
    • [#3717](https://nuget.codeplex.com/workitem/3717) — Удаление неявных обновлений до последней версии исправления
  9. [Gregory Vandenbrouck](https://www.codeplex.com/site/users/view/vdbg)
    • Несколько исправлений ошибок и улучшений для NuGet.Server, команды nuget.exe зеркало и других.
    • Эта работа была выполнена в течение нескольких месяцев, с Грегори, работая с нами в нужное время, чтобы интегрироваться в мастер на 2,8.

Разрешение исправлений для зависимостей

При разрешении зависимостей пакета NuGet исторически реализовал стратегию выбора самой низкой основной и дополнительной версии пакета, которая удовлетворяет зависимостям пакета. В отличие от основной и дополнительной версии, однако версия исправления всегда разрешалась до самой высокой версии. Хотя поведение было хорошо намерением, оно создало отсутствие детерминизма для установки пакетов с зависимостями. Рассмотрим следующий пример:

PackageA@1.0.0 -[ >=1.0.0 ]-> PackageB@1.0.0

Developer1 installs PackageA@1.0.0: installed PackageA@1.0.0 and PackageB@1.0.0

PackageB@1.0.1 is published

Developer2 installs PackageA@1.0.0: installed PackageA@1.0.0 and PackageB@1.0.1

В этом примере, несмотря на то, что developer1 и Developer2 установили PackageA@1.0.0, каждая из них была установлена с другой версией PackageB. NuGet 2.8 изменяет это поведение по умолчанию таким образом, что поведение разрешения зависимостей для версий исправлений соответствует поведению для основных и дополнительных версий. В приведенном выше примере PackageB@1.0.0 будет установлено в результате установки PackageA@1.0.0, независимо от новой версии исправления.

-DependencyVersion Switch

Хотя NuGet 2.8 изменяет поведение по умолчанию для разрешения зависимостей, он также добавляет более точный контроль над процессом разрешения зависимостей с помощью переключателя -DependencyVersion в консоли диспетчера пакетов. Параметр позволяет разрешать зависимости до самой низкой версии (поведение по умолчанию), максимально возможной версии или самой высокой дополнительной или исправленной версии. Этот параметр работает только для установки пакета в команде PowerShell.

DependencyVersion Switch

Атрибут DependencyVersion

Помимо параметра -DependencyVersion, описанного выше, NuGet также позволил задать новый атрибут в файле Конфигурации Nuget.Config, определяющий значение по умолчанию, если параметр -DependencyVersion не указан в вызове пакета установки. Это значение также будет соблюдаться диалогом NuGet диспетчер пакетов для любых операций установки пакета. Чтобы задать это значение, добавьте приведенный ниже атрибут в файл Nuget.Config:

<config>
    <add key="dependencyversion" value="Highest" />
</config>

Предварительный просмотр операций NuGet с помощью whatif

Некоторые пакеты NuGet могут иметь глубокие граф зависимостей, и таким образом, это может быть полезно во время установки, удаления или обновления операции, чтобы сначала увидеть, что произойдет. NuGet 2.8 добавляет стандартный переключатель PowerShell -whatif в команды install-package, uninstall-package и update-package, чтобы включить визуализацию всего закрытия пакетов, к которым будет применена команда. Например, выполнение install-package Microsoft.AspNet.WebApi -whatif в пустом веб-приложении ASP.NET дает следующее.

PM> install-package Microsoft.AspNet.WebApi -whatif
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.WebHost (≥ 5.0.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Core (≥ 5.0.0)'.
Attempting to resolve dependency 'Microsoft.AspNet.WebApi.Client (≥ 5.0.0)'.
Attempting to resolve dependency 'Newtonsoft.Json (≥ 4.5.11)'.
Install Newtonsoft.Json 4.5.11
Install Microsoft.AspNet.WebApi.Client 5.0.0
Install Microsoft.AspNet.WebApi.Core 5.0.0
Install Microsoft.AspNet.WebApi.WebHost 5.0.0
Install Microsoft.AspNet.WebApi 5.0.0

Более раннюю версию пакета

Не редко устанавливается предварительная версия пакета, чтобы исследовать новые функции, а затем решить откат до последней стабильной версии. До NuGet 2.8 это был многоэтапный процесс удаления предварительного пакета и его зависимостей, а затем установки более ранней версии. Однако при использовании NuGet 2.8 пакет обновления откатит все закрытие пакета (например, дерево зависимостей пакета) до предыдущей версии.

Зависимости разработки

Многие различные типы возможностей можно доставлять в виде пакетов NuGet, включая средства, используемые для оптимизации процесса разработки. Эти компоненты, хотя они могут быть важны для разработки нового пакета, не должны рассматриваться как зависимость нового пакета при последующей публикации. NuGet 2.8 позволяет пакету идентифицировать себя в .nuspec файле как developmentDependency. При установке эти метаданные также будут добавлены packages.config в файл проекта, в который был установлен пакет. При последующем анализе этого packages.config файла для зависимостей NuGet во время nuget.exe packон исключит эти зависимости, помеченные как зависимости разработки.

Отдельные файлы packages.config для разных платформ

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

Multiple package.config files

Возврат к локальному кэшу

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

PM> Install-Package jquery
The source at nuget.org [https://www.nuget.org/api/v2/] is unreachable. Falling back to NuGet Local Cache at C:\Users\me\AppData\Local\NuGet\Cache
Installing 'jQuery 2.0.3'.
Successfully installed 'jQuery 2.0.3'.
Adding 'jQuery 2.0.3' to WebApplication18.
Successfully added 'jQuery 2.0.3' to WebApplication18.

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

Обновления клиента NuGet WebMatrix

Наряду с NuGet 2.8 расширение NuGet для WebMatrix также было обновлено, чтобы включить многие основные функции, предоставляемые с NuGet 2.5. К новым возможностям относятся такие функции, как Update All, "Минимальная версия NuGet", а также возможность перезаписи файлов содержимого.

Чтобы обновить расширение NuGet диспетчер пакетов в WebMatrix 3:

  1. Открытие WebMatrix 3
  2. Щелкните значок расширений на ленте
  3. Выберите вкладку Обновления
  4. Щелкните, чтобы обновить nuGet диспетчер пакетов до версии 2.5.0
  5. Закрытие и перезапуск WebMatrix 3

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

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

Одним из основных исправлений ошибок стало улучшение производительности команды update-package -переустановки.

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