Condividi tramite


tools.json per l'individuazione delle versioni di nuget.exe

Oggi, esistono alcuni modi per ottenere la versione più recente di nuget.exe nel computer in modo scriptabile. Ad esempio, è possibile scaricare ed estrarre il NuGet.CommandLine pacchetto da nuget.org. Questa situazione presenta una certa complessità perché richiede già di avere nuget.exe (per nuget.exe install) oppure è necessario decomprimere il file con estensione nupkg usando uno strumento di decompressione di base e trovare il file binario all'interno.

Se si dispone già di nuget.exe, è anche possibile usare nuget.exe update -self, ma ciò richiede anche la presenza di una copia esistente di nuget.exe. Questo approccio aggiorna anche l'utente alla versione più recente. Non consente l'uso di una versione specifica.

L'endpoint tools.json è disponibile sia per risolvere il problema di bootstrap che per fornire il controllo della versione di nuget.exe scaricata. Può essere usato in ambienti CI/CD o in script personalizzati per individuare e scaricare qualsiasi versione rilasciata di nuget.exe.

L'endpoint tools.json può essere recuperato usando una richiesta HTTP non autenticata , ad esempio Invoke-WebRequest in PowerShell o wget. Può essere analizzato usando un deserializzatore JSON e gli URL di download successivi nuget.exe possono essere recuperati anche usando richieste HTTP non autenticate.

L'endpoint può essere recuperato usando il GET metodo :

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

Lo schema JSON per l'endpoint è disponibile qui:

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

Response

La risposta è un documento JSON contenente tutte le versioni disponibili di nuget.exe.

L'oggetto JSON radice ha la proprietà seguente:

Nome Digita Obbligatorio
nuget.exe matrice di oggetti yes

Ogni oggetto nella nuget.exe matrice ha le proprietà seguenti:

Nome Digita Obbligatorio Note
versione string yes Stringa SemVer 2.0.0
URL. string yes URL assoluto per il download di questa versione di nuget.exe
fase string yes Stringa di enumerazione
Caricato string yes Timestamp ISO 8601 approssimativo di quando la versione è stata resa disponibile

Gli elementi nella matrice verranno ordinati in ordine decrescente, SemVer 2.0.0. Questa garanzia è destinata a ridurre il carico di un client interessato al numero di versione più alto. Ciò significa tuttavia che l'elenco non è ordinato in ordine cronologico. Ad esempio, se una versione principale inferiore viene usata in una data successiva a una versione principale superiore, questa versione di servizio non verrà visualizzata nella parte superiore dell'elenco. Se si vuole che la versione più recente rilasciata dal timestamp, è sufficiente ordinare la matrice in base alla uploaded stringa. Questo funziona perché il uploaded timestamp è nel formato ISO 8601 che può essere ordinato cronologicamente usando un ordinamento lessicografico (ad esempio un semplice ordinamento di stringhe).

La stage proprietà indica come è stata esaminata questa versione dello strumento.

Fase Significato
EarlyAccessPreview Non ancora visibile nella pagina Web di download e deve essere convalidata dai partner
Rilasciato Disponibile nel sito di download, ma non è ancora consigliato per un consumo diffuso
ReleasedAndBlessed Disponibile nel sito di download ed è consigliato per l'utilizzo

Un approccio semplice per avere la versione più recente consigliata consiste nell'accettare la prima versione nell'elenco con il stage valore di ReleasedAndBlessed. Questa operazione funziona perché le versioni sono ordinate in ordine SemVer 2.0.0.

Il NuGet.CommandLine pacchetto in nuget.org viene in genere aggiornato solo con ReleasedAndBlessed le versioni.

Esempio di richiesta

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

Risposta di esempio

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