Partilhar via


tools.json para descobrir versões de nuget.exe

Hoje, existem algumas maneiras de obter a versão mais recente do nuget.exe em seu computador de forma programável. Por exemplo, você pode baixar e extrair o pacote NuGet.CommandLine do nuget.org. Isso tem certa 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 descompactação 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 ponto de extremidade tools.json está disponível para resolver o problema de inicialização e para conceder controle da versão do nuget.exe que você baixar. Isso pode ser usado em ambientes de CI/CD ou em scripts personalizados para descobrir e baixar qualquer versão de lançamento do nuget.exe.

O ponto de extremidade tools.json pode ser obtido 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 URLs de download de nuget.exe subsequentes também podem ser buscados usando solicitações HTTP não autenticadas.

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

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

O esquema JSON do 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 de nuget.exe.

O objeto JSON raiz tem a seguinte propriedade:

Nome Digitar Obrigatório
nuget.exe matriz de objetos sim

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

Nome Digitar Obrigatória Observações
version string sim Uma cadeia de caracteres do SemVer 2.0.0
url string sim Uma URL absoluta para baixar esta versão de nuget.exe
preparar string sim Uma cadeia de caracteres enumerada
Carregado string sim Um carimbo de data/hora ISO 8601 aproximado de quando a versão foi disponibilizada

Os itens na matriz serão classificados em ordem decrescente do 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, isso significa que a lista não está classificada em 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 você quiser que a versão mais recente seja lançada por carimbo de data/hora, basta classificar a matriz pela cadeia de caracteres uploaded. Isso funciona porque o carimbo de data/hora uploaded 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 propriedade stage indica o quão verificada esta versão da ferramenta é.

Estágio Significado
EarlyAccessPreview Ainda não visível na página da web de download e deve ser validado por parceiros
Lançado Disponível no site de download, mas ainda não é recomendado para consumo generalizado
ReleasedAndBlessed Disponível no site de download e recomendado para consumo

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

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

Solicitação de exemplo

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

Resposta de exemplo

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