Прежде чем приступить к разработке основного демонстрационного проекта, давайте рассмотрим один из инструментов, который поставляется совместно с ASP.NET MVC 3.
Задачи NuGet
Как было было отмечено в прошлой части, ASP.NET MVC 3 использует NuGet для работы с библиотеками. Этот инструмент позволяет упростить процесс их установки, обновления и, при необходимости, удаления. Используя графический или консольный интерфейс, разработчику всего лишь необходимо дать соответствующую команду. NuGet самостоятельно:
- по названию найдет в интернете нужный установочный пакет;
- загрузит его с учетом зависимостей от других библиотек;
- распакует и проверит целостность;
- добавит в проект ссылки (reference) на сборки;
- при необходимости, модифицирует файлы конфигурации проекта.
Звучит внушительно?
Однако за всей этой простой можно упустить один очевидный, но очень важный момент: при обновлении библиотеки NuGet не проверяет совместимость новой версии и существующего кодом. Поэтому по прежнему необходимо читать описание изменений в библиотеке.
NuGet не является частью ASP.NET MVC 3 и может использоваться в проектах другого типа. При этом он может быть установлен как в Visual Studio 2010, так и в бесплатных версиях: Visual Web Developer 2010, Visual Studio C# Express.
При необходимости установить NuGet без ASP.NET MVC 3, его можно загрузить через менеджер дополнений Visual Studio или с официального сайта: http://nuget.codeplex.com/
Локальное хранилище установочных пакетов
Установленные библиотеки размещаются в отдельных папках, которые располагаются в папке packages. Последняя, в свою очередь, находится в корневой папке решения (solution).
Чтобы избежать повторной загрузки установочных пакетов, NuGet использует локальный кэш. Он создается отдельно для каждого пользователя операционной системы и размещается по адресу:
C:\Users\%userName%\AppData\Local\NuGet\Cache.
Графический интерфейс "Add Library Package Reference"
Для использования графического интерфейса необходимо открыть диалоговое окно "Add Library Package Reference". Для этого в Solution Explorer или Solution Navigator в контекстном меню проекта нужно выбрать одноименный пункт. Кроме того, он также доступен в через подменю Project в главном меню Visual Studio.
В диалоговом окне NuGet слева расположен перечень разделов:
- Installed packages – содержит список установленных библиотек;
- Online – обеспечивает доступ к каталогу установочных пакетов;
- Updates – выводит список обновлений, доступных для установленных библиотек;
- Recent packages – перечисляет последние использованные установочные пакеты.
Для списков Online и Updates доступен выбор источников (т.е. сервера откуда будут взяты данные об установочных пак��ах). Изменить их перечень можно в окне настройки NuGet.
В центральной части выводится список доступных в данном разделе установочных пакетов. При выборе любого их них, рядом с его названием отображается кнопка действия: установить, обновить или удалить.
Справа доступно описание выбранной библиотеки. Обратите внимание, что кроме названия, автора, версии, рейтинга и описания также содержится список установочных пакетов от которых она зависит. В случае необходимости они также будут загружены вместе с ней.
Консоль "Package Manager Console"
Другим вариантом взаимодействия с NuGet является консоль. Она подойдет тем разработчикам, которым удобнее работать с командой строкой. Кроме того, она предоставляет больше возможностей, чем предыдущий вариант графическим интерфейсом.
Для того, чтобы открыть Package Manager Console можно воспользоваться меню View > Other Windows и выбрать в нем одноименный пункт. Также доступны другие варианты: Tools > Library Package Manager или кнопка на панели инструментов Visual Studio.
После загрузки и инициализации PowerShell, который используется для работы данного интерфейса, окно консоли будет выглядеть следующим образом:
В его верхней части расположены списки для указания источника данных и проекта по умолчанию. При этом для отдельной команды эти значения могут быть переопределены её параметрами.
Стоит отметить, что при вводе поддерживается завершение набранных команд и названий установочных пакетов. Для этого необходимо нажать кнопку Tab и NuGet отобразит список с возможными вариантами. В случае если вариант только один, то он сразу будет подставлен в вводимую строку.
Рассмотрим доступные команды и их параметры:
Get-Package – вывод списка установочных пакетов |
[Без параметров] | Выводит список установленных пакетов. |
‑Source sourceUrlOrPath | Определяет источник для получения информации о пакетах. Это может быть RSS поток, папка на диске или сервис, поддерживающий OData. |
-ListAvailable [filterSpecification] | Отображает список библиотек, доступных в выбранном источнике. Возможна установка фильтра, который применяется для названий и описаний библиотек. |
‑Updates | Отображает список библиотек, для которых доступны обновления. |
‑Recent | Выводит список последних установленных библиотек. |
‑First N | Отображает первые N установочных пакетов в списке. |
‑Skip N | Пропускает N установочных пакетов при выводе списка. Вместе с параметром –First позволят выводить список частями. Например, чтобы вывести названия библиотек с 15 по 45 необходимо указать "–Skip 15 –First 30" |
‑Filter filterSpecification | Устанавливает фильтр для вывода списка библиотек как установленных, так и на доступных в источнике. Применяется к названию и описанию библиотеки. |
Install‑Package – установка библиотек |
‑Id packageName | Обязательный первый параметр (при этом можно опустить "–Id"). Задает имя установочно пакета. При этом если не ввести имя показывается 30 самых библиотек с самым большим рейтингом. Если указать часть имени, то осуществляется поиск по вхождению указанного текста в имена библиотек. |
‑IgnoreDependencies | Указывает необходимость установки только указанной библиотеки, игнорируя её зависимости от других. |
‑Project projectName | Определяет в какой из проектов необходимо установить библиотеку. По умолчанию используется проект текущий проект, указанный в окне консоли. |
‑Source sourceURL | Указывает источник получения установочного пакета. |
‑Version versionNumber | Запрашивает установку указанной версии библиотеки (по умолчанию используется самая последняя). |
Uninstall‑Package – деинсталляция библиотек |
‑Id packageName | Обязательный первый параметр (при этом можно опустить "–Id"). Определяет имя библиотеки для удаления. |
‑RemoveDependencies | Указывать не необходимость так же удалить пакеты, от которых зависит библиотека и которые не используются другими. |
‑Force | Удаляет библиотеку, даже если есть зависимые от неё компоненты. |
‑Version versionNumber | Указывает версию удаляемой библиотеки. По умолчанию выбирается самая последняя версия. |
‑Project projectName | Определяет из какого проекта удаляется библиотека. По умолчанию используется проект текущий проект, указанный в окне консоли. |
Update-Package – обновление установленных библиотек |
‑Id packageName | Первый параметр (при этом можно опустить "–Id"). Определяет имя библиотеки, для которой производится поиск и установка обновления. Если он не указан, то производится обновление всех библиотек. |
‑UpdateDependencies | При установке этого флага производится обновление всех зависимых библиотек. |
‑Project projectName | Определяет в каком проекте будет обновлены библиотеки. Если ключ не указан, то выбранный пакет или все пакеты обновляются во всех проектах решения. |
‑Source sourceURL | Переопределяет источник получения установочного пакета для данной команды. |
‑Version versionNumber | Указывает версию до которой происходит обновление. По умолчанию выбирается самая последняя версия. |
‑Safe | Задействует безопасное обновление, т.е. загружаются только минорные обновления. Например: установлена версия 1.0.0 и доступны 1.0.1, 1.0.2 и 1.1. При использовании ключа –safe будет загружена версия 1.0.2, а без него – 1.1. |
Open-PackagePage – переход на страницу проекта |
‑Id packageName | Обязательный первый параметр (при этом можно опустить "–Id"). Определяет имя библиотеки, страница которой будет открыта в браузере. |
‑Version versionNumber | Указывает номер версии. |
‑Source sourceURL | Переопределяет источник получения установочного пакета для данной команды. |
‑License | Открывает в браузере страницу с лицензионным соглашением. |
‑ReportAbuse | Открывает в браузере страницу для подачи жалобы. |
‑PassThru | Изменяет поведение команды. Вместо открытия браузера возвращается строка с адресом выбранной страницы. Например, следующий код присваивает переменной $url ссылку на страницу с текстом лицензии: $url = Open-PackagePage Ninject -License -WhatIf -PassThru |
Get–Projects – выбор проекта(ов) (для конвейера команд) |
[Без параметров] | Возвращает текущий проект. |
-All | Возвращает все проекты загруженного решения (solution). |
‑Name projectName | Возвращает заданный проект для команды. |
Вот несколько примеров:
- Get-Package -ListAvailable jQuery – выводит список всех доступных установочных пакетов, у которых в имени или описании есть текст "jQuery".
- Get-Package –ListAvailable -Skip 5 -First 10 jQuery – отображает перечень с 5 по 15 библиотеку, в названии которых содержится слово "jQuery".
- Get-Package -Update -Filter jQuery – отображает список обновлений, доступных для установленных проектов в названии которых содержится слово "jQuery".
- Install-Package jQue[нажатие кнопки "Tab"] – откроет окно подсказки с списком библиотек, имена которых начинаются с текста "jQue". Обратите внимание на возможность пропускать указание "–Id".
- Update-Package – обновляет все установочные пакеты во всех проектах текущего решения.
- Update-Package EntityFramework – обновляет пакет EntityFramework во всех проектах решения.
- Update-Package –ProjectName BookCatalog – обновляет все пакеты в проекте BookCatalog.
- Update-Package EntityFramework -ProjectName BookCatalog – обновит библиотеку EntityFramework в только проекте BookCatalog.
Кроме того NuGet позволяет создавать собственные источники и установочные пакеты. Это упрощает размещение своих проектов в интернете и создание локальных репозиториев. Подробно эти возможности рассмотрены в серии статей "Использование NuGet". Ну а в следующей части приступим к разработке демонстрационного проекта.