Compartilhar via


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

Hoje, há algumas maneiras de obter a versão mais recente do nuget.exe em seu computador de forma scriptável. Por exemplo, você pode baixar e extrair o NuGet.CommandLine pacote de nuget.org. Isso tem alguma complexidade, pois requer que você já tenha nuget.exe (para nuget.exe install) ou descompacte o .nupkg usando uma ferramenta de descompactação básica e localize o binário dentro.

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

O tools.json endpoint está disponível tanto para resolver o problema de bootstrap quanto para permitir controle sobre a 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 endpoint tools.json pode ser acessado 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 de nuget.exe subsequentes também podem ser buscadas usando solicitações HTTP não autenticadas.

O ponto de extremidade pode ser buscado usando o método GET.

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 que contém 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 sim

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

Nome Tipo Obrigatório Anotações
versão cadeia sim Uma cadeia de caracteres "SemVer 2.0.0"
url cadeia sim Uma URL absoluta para baixar esta versão do nuget.exe
fase cadeia sim Uma cadeia de caracteres de enumeração
Carregado cadeia sim Um timestamp aproximado no formato ISO 8601 de quando a versão estiver disponível

Os itens na matriz serão classificados em ordem decrescente, SemVer 2.0.0. Essa garantia destina-se a reduzir a carga de um cliente 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 mais alta, essa versão atendida não aparecerá na parte superior da lista. Se você quiser a versão mais recente lançada em timestamp, basta classificar a matriz pela uploaded string. Isso funciona porque o uploaded carimbo 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 quanto essa versão da ferramenta foi verificada.

Etapa Meaning
Prévia de Acesso Antecipado 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 amplo
LiberadoEEmbençoado Disponível no site de download e é recomendado para consumo

Uma abordagem simples para obter a versão mais recente e recomendada é adotar 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 pacote NuGet.CommandLine no nuget.org normalmente é atualizado apenas com versões ReleasedAndBlessed.

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