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


tools.json для обнаружения версий nuget.exe

Сегодня существует несколько способов получить последнюю версию nuget.exe на компьютере в сценарии. Например, можно скачать и извлечь NuGet.CommandLine пакет из nuget.org. Это имеет некоторую сложность, так как требуется, что у вас уже есть nuget.exe (для nuget.exe install) или вам нужно распаковать Nupkg с помощью базового средства распакуния и найти двоичный файл внутри.

Если у вас уже есть nuget.exe, можно также использовать nuget.exe update -self, однако для этого также требуется существующая копия nuget.exe. Этот подход также обновляет вас до последней версии. Он не позволяет использовать определенную версию.

tools.json Конечная точка доступна как для решения проблемы начальной загрузки, так и для предоставления управления версией скачанных nuget.exe. Это можно использовать в средах CI/CD или в пользовательских сценариях для обнаружения и скачивания любой выпущенной версии nuget.exe.

tools.json Конечную точку можно получить с помощью http-запроса без проверки подлинности (напримерInvoke-WebRequest, в PowerShell илиwget). Его можно проанализировать с помощью десериализатора JSON и последующих URL-адресов загрузки nuget.exe также можно получить с помощью неавтодентизованных HTTP-запросов.

Конечную точку можно получить с помощью GET метода:

GET https://dist.nuget.org/tools.json

Схема JSON для конечной точки доступна здесь:

GET https://dist.nuget.org/tools.schema.json

Response

Ответ — это документ JSON, содержащий все доступные версии nuget.exe.

Корневой объект JSON имеет следующее свойство:

Имя. Type Обязательное поле
nuget.exe массив объектов yes

Каждый объект в массиве nuget.exe имеет следующие свойства:

Имя. Type Обязательное поле Примечания.
версия строка yes Строка SemVer 2.0.0
URL-адрес строка yes Абсолютный URL-адрес для скачивания этой версии nuget.exe
постановка строка yes Строка перечисления
Загружены строка yes Приблизительная метка времени ISO 8601 о том, когда была доступна версия

Элементы в массиве будут отсортированы по убыванию, упорядочению SemVer 2.0.0. Эта гарантия предназначена для уменьшения нагрузки клиента, который заинтересован в самом высоком номере версии. Однако это означает, что список не отсортирован в хронологическом порядке. Например, если более низкая основная версия обслуживается позднее, чем более высокая основная версия, эта служба не будет отображаться в верхней части списка. Если требуется последняя версия, выпущенная меткой времени, просто сортируйте массив по строке uploaded . Это работает, так как uploaded метка времени находится в формате ISO 8601 , который можно отсортировать в хронологическом порядке с помощью лексикографической сортировки (т. е. простой сортировки строк).

Свойство stage указывает, как проверена эта версия средства.

Этап Значение
EarlyAccessPreview Пока не отображается на веб-странице скачивания и должен проверяться партнерами
Выпущено Доступно на сайте скачивания, но пока не рекомендуется для широкого использования
ReleasedAndBlessed Доступно на сайте скачивания и рекомендуется использовать его

Один из простых подходов к использованию последней рекомендуемой версии — принять первую версию в списке с значением stageReleasedAndBlessed. Это работает, так как версии сортируются в порядке SemVer 2.0.0.

Пакет NuGet.CommandLine на nuget.org обычно обновляется только с ReleasedAndBlessed версиями.

Образец запроса

GET https://dist.nuget.org/tools.json

Пример ответа

{
    "nuget.exe": [
        {
            "version": "4.8.0-preview3",
            "url": "https://dist.nuget.org/win-x86-commandline/v4.8.0-preview3/nuget.exe",
            "stage": "EarlyAccessPreview",
            "uploaded": "2018-07-06T23:00:00.0000000Z"
        },
        {
            "version": "4.7.1",
            "url": "https://dist.nuget.org/win-x86-commandline/v4.7.1/nuget.exe",
            "stage": "ReleasedAndBlessed",
            "uploaded": "2018-08-10T23:00:00.0000000Z"
        },
        {
            "version": "4.6.1",
            "url": "https://dist.nuget.org/win-x86-commandline/v4.6.1/nuget.exe",
            "stage": "Released",
            "uploaded": "2018-03-22T23:00:00.0000000Z"
        },
        {
            "version": "3.5.0",
            "url": "https://dist.nuget.org/win-x86-commandline/v3.5.0/nuget.exe",
            "stage": "ReleasedAndBlessed",
            "uploaded": "2016-12-19T15:30:00.0000000-08:00"
        },
        {
            "version": "2.8.6",
            "url": "https://dist.nuget.org/win-x86-commandline/v2.8.6/nuget.exe",
            "stage": "ReleasedAndBlessed",
            "uploaded": "2015-09-01T12:30:00.0000000-07:00"
        }
    ]
}