NuGet.Server
NuGet.Server — это предоставляемый организацией .NET Foundation пакет, который создает приложение ASP.NET для размещения веб-канала пакетов на любом сервере со службами IIS. Попросту говоря, NuGet.Server создает на сервере папку, доступную по протоколу HTTP(S) (и, в частности, OData). Простота настройки делает это решение оптимальным для несложных сценариев.
- Создайте пустое веб-приложение ASP.NET в Visual Studio и добавьте в него пакет NuGet.Server.
- Настройте папку
Packages
в приложении и добавьте пакеты. - Разверните приложение на подходящем сервере.
В следующих разделах подробно рассматривается выполнение этого процесса с помощью C#.
Если у вас есть дополнительные вопросы о NuGet.Server, сообщите об этом на https://github.com/nuget/NuGetGallery/issues.
Создание и развертывание веб-приложения ASP.NET с пакетом NuGet.Server
В Visual Studio выберите "Создать > файл > Project", найдите "веб-приложение ASP.NET (платформа .NET Framework)", выберите соответствующий шаблон для C#.
Задайте для параметра Framework значение ".NET Framework 4.6".
Присвойте приложению подходящее имя, отличное от NuGet.Server, нажмите кнопку "ОК", а затем в следующем диалоговом окне выберите пустой шаблон и нажмите кнопку ОК.
Щелкните проект правой кнопкой мыши и выберите Управление пакетами NuGet.
В пользовательском интерфейсе диспетчера пакетов откройте вкладку Обзор, а затем найдите и установите последнюю версию пакета NuGet.Server, если целевой платформой является .NET Framework 4.6. (Ее также можно установить из консоли диспетчера пакетов с помощью команды
Install-Package NuGet.Server
.) Примите условия лицензионного соглашения при отображении соответствующего запроса.В результате установки 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" />
. В этом случае удалите элемент с более старой версией платформы.Запустите сайт локально в Visual Studio (с помощью запуска отладки > без отладки или CTRL+F5). Домашняя страница содержит URL-адреса веб-канала пакетов, как показано ниже. Если возникают ошибки, тщательно изучите
web.config
на наличие повторяющихся элементов.При первом запуске приложения пакет NuGet.Server изменяет структуру папки
Packages
так, чтобы она содержала вложенную папку для каждого пакета. Такая структура соответствует структуре локального хранилища, представленной в NuGet 3.3, что позволяет повысить производительность. При добавлении дополнительных пакетов следуйте этой структуре.Протестировав развертывание в локальной среде, можно развернуть приложение на любом внутреннем или внешней сайте.
При развертывании на сайте
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, а затем присвойте свойству Действие сборки значение Содержимое, а свойству Копировать в выходной каталог — значение Всегда копировать.
Заметки о выпуске
Заметки о выпуске NuGet.Server доступны на посвященной выпуску странице GitHub. В заметках приводятся сведения об исправленных ошибках и добавленных функциях.
Поддержка NuGet.Server
Для получения дополнительной помощи по использованию NuGet.Server сообщите о проблеме на сайте https://github.com/nuget/NuGetGallery/issues.