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


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

Ответ

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

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

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

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

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

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

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

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

Один из простых подходов к использованию последней рекомендуемой версии — выбрать первую версию в списке со значением 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"
        }
    ]
}