NuGet.Server

NuGet.Server — это предоставляемый организацией .NET Foundation пакет, который создает приложение ASP.NET для размещения веб-канала пакетов на любом сервере со службами IIS. Попросту говоря, NuGet.Server создает на сервере папку, доступную по протоколу HTTP(S) (и, в частности, OData). Простота настройки делает это решение оптимальным для несложных сценариев.

  1. Создайте пустое веб-приложение ASP.NET в Visual Studio и добавьте в него пакет NuGet.Server.
  2. Настройте папку Packages в приложении и добавьте пакеты.
  3. Разверните приложение на подходящем сервере.

В следующих разделах подробно рассматривается выполнение этого процесса с помощью C#.

Если у вас есть дополнительные вопросы о NuGet.Server, сообщите об этом на https://github.com/nuget/NuGetGallery/issues.

Создание и развертывание веб-приложения ASP.NET с пакетом NuGet.Server

  1. В Visual Studio выберите "Создать > файл > Project", найдите "веб-приложение ASP.NET (платформа .NET Framework)", выберите соответствующий шаблон для C#.

    Select the .NET Framework web project template

  2. Задайте для параметра Framework значение ".NET Framework 4.6".

    Setting the target framework for a new project

  3. Присвойте приложению подходящее имя, отличное от NuGet.Server, нажмите кнопку "ОК", а затем в следующем диалоговом окне выберите пустой шаблон и нажмите кнопку ОК.

    Select the empty web project

  4. Щелкните проект правой кнопкой мыши и выберите Управление пакетами NuGet.

  5. В пользовательском интерфейсе диспетчера пакетов откройте вкладку Обзор, а затем найдите и установите последнюю версию пакета NuGet.Server, если целевой платформой является .NET Framework 4.6. (Ее также можно установить из консоли диспетчера пакетов с помощью команды Install-Package NuGet.Server.) Примите условия лицензионного соглашения при отображении соответствующего запроса.

    Installing the NuGet.Server package

  6. В результате установки NuGet.Server пустое веб-приложение преобразуется в источник пакетов. При этом устанавливаются разные пакеты, в приложении создается папка Packages, а в файл web.config добавляются дополнительные параметры (подробные сведения см. в комментариях в этом файле).

    Важно!

    Тщательно проверьте web.config после того, как пакет NuGet.Server внесет все изменения в этот файл. NuGet.Server может не перезаписывать имеющиеся элементы, а создавать их дубликаты. Позднее при попытке запуска проекта эти дубликаты приведут к ошибке "Внутренняя ошибка сервера". Например, если ваш файл web.config содержит <compilation debug="true" targetFramework="4.5.2" /> до установки NuGet.Server, пакет не перезаписывает его, а вставляет второй экземпляр <compilation debug="true" targetFramework="4.6" />. В этом случае удалите элемент с более старой версией платформы.

  7. Запустите сайт локально в Visual Studio (с помощью запуска отладки > без отладки или CTRL+F5). Домашняя страница содержит URL-адреса веб-канала пакетов, как показано ниже. Если возникают ошибки, тщательно изучите web.config на наличие повторяющихся элементов.

    Default home page for an application with NuGet.Server

  8. При первом запуске приложения пакет NuGet.Server изменяет структуру папки Packages так, чтобы она содержала вложенную папку для каждого пакета. Такая структура соответствует структуре локального хранилища, представленной в NuGet 3.3, что позволяет повысить производительность. При добавлении дополнительных пакетов следуйте этой структуре.

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

  10. При развертывании на сайте http://<domain> URL-адрес источника пакетов будет иметь вид http://<domain>/nuget.

Добавление пакетов в веб-канал извне

После запуска сайта NuGet.Server можно добавить пакеты с помощью nuget push при условии, что в файле web.config задано значение ключа API.

После установки пакета NuGet.Server файл web.config содержит пустое значение appSetting/apiKey.

<appSettings>
    <add key="apiKey" value="" />
</appSettings>

Если параметр apiKey опущен или имеет пустое значение, отправка пакетов в веб-канал отключена.

Чтобы включить эту возможность, присвойте параметру apiKey значение (в идеале надежный пароль) и добавьте ключ appSettings/requireApiKey со значением true.

<appSettings>
    <!-- Sets whether an API Key is required to push/delete packages -->
    <add key="requireApiKey" value="true" />

    <!-- Set a shared password (for all users) to push/delete packages -->
    <add key="apiKey" value="" />
</appSettings>

Если сервер уже защищен или ключ API не требуется по иным причинам (например, при использовании частного сервера в локальной сети рабочей группы), ключу requireApiKey можно присвоить значение false. После этого все пользователи, имеющие доступ к серверу, смогут отправлять пакеты.

Начиная с версии NuGet.Server 3.0.0, URL-адрес для отправки пакетов изменился на http://<domain>/nuget. До версии 3.0.0 использовался URL-адрес для отправки http://<domain>/api/v2/package.

В версии NuGet 3.2.1 и более поздних устаревший URL-адрес /api/v2/package по умолчанию включен в дополнение к /nuget посредством параметра enableLegacyPushRoute: true в конфигурации запуска (по умолчанию NuGetODataConfig.cs). Обратите внимание, что эта функция не работает при размещении нескольких веб-каналов в одном проекте.

Удаление пакетов из веб-канала

При использовании NuGet.Server команда nuget delete удаляет пакет из репозитория при условии, что вы указали ключ API вместе с комментарием.

Если вы хотите изменить поведение, чтобы вместо этого удалить пакет из списка (оставив его доступным для восстановления), измените значение ключа enableDelisting в web.config на true.

Настройка папки Packages

В NuGet.Server 1.5 или более поздней версии можно настроить папку с пакетами с помощью значения appSettings/packagesPath в файле web.config:

<appSettings>
    <!-- Set the value here to specify your custom packages folder. -->
    <add key="packagesPath" value="C:\MyPackages" />
</appSettings>

packagesPath может быть абсолютным или виртуальным путем.

Если параметр packagesPath опущен или имеет пустое значение, используется папка пакетов по умолчанию ~/Packages.

Предоставление доступа к пакетам при публикации веб-приложения

Чтобы сделать пакеты доступными через веб-канал при публикации приложения на сервере, добавьте файлы каждого .nupkg в папку Packages в Visual Studio, а затем присвойте свойству Действие сборки значение Содержимое, а свойству Копировать в выходной каталог — значение Всегда копировать.

Copying packages to the Packages folder in the project

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

Заметки о выпуске NuGet.Server доступны на посвященной выпуску странице GitHub. В заметках приводятся сведения об исправленных ошибках и добавленных функциях.

Поддержка NuGet.Server

Для получения дополнительной помощи по использованию NuGet.Server сообщите о проблеме на сайте https://github.com/nuget/NuGetGallery/issues.