Partilhar via


tools.json para identificar versões do nuget.exe

Hoje, existem algumas maneiras de obter a versão mais recente do nuget.exe em sua máquina de forma programável. Por exemplo, você pode baixar e extrair o NuGet.CommandLine pacote do nuget.org. Isso tem alguma complexidade, pois requer que você já tenha nuget.exe (para nuget.exe install) ou você tem que descompactar o .nupkg usando uma ferramenta básica de descompactar e encontrar o binário dentro.

Se você já tem nuget.exe, você também pode usar nuget.exe update -self, no entanto, isso também requer ter uma cópia existente do nuget.exe. Essa abordagem também atualiza você para a versão mais recente. Não permite o uso de uma versão específica.

O tools.json ponto de extremidade está disponível para resolver o problema de inicialização e para dar controle da versão do nuget.exe que você baixa. Isso pode ser usado em ambientes de CI/CD ou em scripts personalizados para descobrir e baixar qualquer versão lançada do nuget.exe.

O tools.json endpoint pode ser recuperado usando uma solicitação HTTP não autenticada (por exemplo, Invoke-WebRequest no PowerShell ou wget). Ele pode ser analisado usando um desserializador JSON e as URLs de download subsequentes de nuget.exe também podem ser obtidas usando solicitações HTTP não autenticadas.

O ponto de extremidade pode ser obtido usando o GET método:

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

O esquema JSON para o ponto de extremidade está disponível aqui:

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

Resposta

A resposta é um documento JSON contendo todas as versões disponíveis do nuget.exe.

O objeto JSON raiz tem a seguinte propriedade:

Nome Tipo Obrigatório
nuget.exe matriz de objetos yes

Cada objeto na nuget.exe matriz tem as seguintes propriedades:

Nome Tipo Obrigatório Observações
versão cadeia (de caracteres) yes Uma cadeia de caracteres SemVer 2.0.0
URL cadeia (de caracteres) yes Um URL absoluto para baixar esta versão do nuget.exe
stage cadeia (de caracteres) yes Uma cadeia de caracteres de enum
carregado cadeia (de caracteres) yes A data/hora ISO 8601 aproximada de quando a versão foi disponibilizada

Os itens na matriz serão classificados em ordem decrescente, SemVer 2.0.0. Esta garantia destina-se a reduzir a carga de um cliente que está interessado no número de versão mais alto. No entanto, isto significa que a lista não está ordenada por ordem cronológica. Por exemplo, se uma versão principal inferior for atendida em uma data posterior a uma versão principal superior, essa versão com manutenção não aparecerá no topo da lista. Se pretender a versão mais recente lançada por timestampuploaded de data/hora, basta classificar a matriz pela string. Isso funciona porque o carimbo uploaded de data/hora está no formato ISO 8601 , que pode ser classificado cronologicamente usando uma classificação lexicográfica (ou seja, uma classificação de cadeia de caracteres simples).

A stage propriedade indica o quão aprovada esta versão da ferramenta é.

Etapa Meaning
Acesso AntecipadoPreview Ainda não visível na página web de download e deve ser validado pelos parceiros
Libertado Disponível no site de download, mas ainda não é recomendado para consumo generalizado
LançadoEAbençoado Disponível no site de download e é recomendado para consumo

Uma abordagem simples para obter a versão mais recente e recomendada é selecionar a primeira versão na lista que possui o valor stage de ReleasedAndBlessed. Isso funciona porque as versões são classificadas na ordem SemVer 2.0.0.

O NuGet.CommandLine pacote no nuget.org normalmente só é atualizado com ReleasedAndBlessed versões.

Pedido de amostra

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

Resposta da amostra

{
    "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"
        }
    ]
}