tools.json zum Entdecken von Nuget.exe-Versionen

Heute gibt es ein paar Möglichkeiten, die neueste Version von nuget.exe auf Ihrem Computer in skriptbarer Weise zu erhalten. Sie können beispielsweise das NuGet.CommandLine Paket aus nuget.org herunterladen und extrahieren. Dies hat einige Komplexität, da sie entweder erfordert, dass Sie bereits nuget.exe (for nuget.exe install) haben, oder Sie müssen die nupkg mit einem einfachen Entpacktool entzippen und die Binärdatei innerhalb finden.

Wenn Sie bereits nuget.exe haben, können Sie auch verwenden nuget.exe update -self, aber dies erfordert auch eine vorhandene Kopie von nuget.exe. Dieser Ansatz aktualisiert Sie auch auf die neueste Version. Die Verwendung einer bestimmten Version ist nicht zulässig.

Der tools.json Endpunkt ist verfügbar, um das Bootstrapping-Problem zu lösen und die Kontrolle über die Version von nuget.exe zu geben, die Sie herunterladen. Dies kann in CI/CD-Umgebungen oder in benutzerdefinierten Skripts verwendet werden, um jede veröffentlichte Version von nuget.exe zu entdecken und herunterzuladen.

Der tools.json Endpunkt kann mithilfe einer nicht authentifizierten HTTP-Anforderung abgerufen werden (z. B. Invoke-WebRequest in PowerShell oder wget). Sie kann mithilfe eines JSON-Deserializers und nachfolgenden nuget.exe Download-URLs auch mithilfe nicht authentifizierter HTTP-Anforderungen abgerufen werden.

Der Endpunkt kann mithilfe der GET Methode abgerufen werden:

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

Das JSON-Schema für den Endpunkt ist hier verfügbar:

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

Antwort

Die Antwort ist ein JSON-Dokument mit allen verfügbaren Versionen von nuget.exe.

Das JSON-Stammobjekt weist die folgende Eigenschaft auf:

Name Type Erforderlich
nuget.exe Array von Objekten ja

Das nuget.exe-Parameterobjekt bietet folgende Eigenschaften:

Name Type Erforderlich Hinweise
version Zeichenfolge ja Eine SemVer 2.0.0 Zeichenfolge
url Zeichenfolge ja Eine absolute URL zum Herunterladen dieser Version von nuget.exe
Stufe Zeichenfolge ja Eine Enumerationszeichenfolge
hochgeladen Zeichenfolge ja Ein ungefährer ISO 8601-Zeitstempel, zu dem die Version verfügbar gemacht wurde

Die Artikel im Array werden in absteigender Reihenfolge, SemVer 2.0.0 sortiert. Diese Garantie soll die Belastung eines Kunden reduzieren, der an der höchsten Versionsnummer interessiert ist. Dies bedeutet jedoch, dass die Liste nicht in chronologischer Reihenfolge sortiert ist. Wenn beispielsweise eine niedrigere Hauptversion zu einem späteren Zeitpunkt als eine höhere Hauptversion gewartet wird, wird diese dienstierte Version nicht am Anfang der Liste angezeigt. Wenn Sie die neueste Version nach Zeitstempel veröffentlichen möchten, sortieren Sie einfach das Array nach der uploaded Zeichenfolge. Dies funktioniert, da sich der uploaded Zeitstempel im ISO 8601-Format befindet, das chronologisch mithilfe einer lexikographischen Sortierung (d. h. einer einfachen Zeichenfolgensortierung) sortiert werden kann.

Die stage Eigenschaft gibt an, wie diese Version des Tools überprüft wird.

Phase Bedeutung
EarlyAccessPreview Auf der Downloadwebseite noch nicht sichtbar und sollten von Partnern überprüft werden
Veröffentlicht Verfügbar auf der Download-Website, wird jedoch noch nicht für den weit verbreiteten Verbrauch empfohlen
ReleasedAndBlessed Verfügbar auf der Downloadwebsite und wird für den Verbrauch empfohlen

Ein einfacher Ansatz für die neueste, empfohlene Version besteht darin, die erste Version in der Liste zu verwenden, die den stage Wert hat ReleasedAndBlessed. Dies funktioniert, da die Versionen in SemVer 2.0.0 sortiert sind.

Das Paket auf nuget.org wird in der NuGet.CommandLine Regel nur mit ReleasedAndBlessed Versionen aktualisiert.

Beispielanforderung

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

Beispielantwort

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