tools.json pour découvrir les versions de nuget.exe

Aujourd’hui, il existe plusieurs façons d’obtenir la dernière version de nuget.exe sur votre machine de manière scriptable. Par exemple, vous pouvez télécharger et extraire le package NuGet.CommandLine à partir de nuget.org. Cela présente une certaine complexité, car il nécessite que vous disposiez déjà de nuget.exe (pour nuget.exe install) ou que vous deviez décompresser le fichier .nupkg à l’aide d’un outil de décompression de base et rechercher le fichier binaire à l’intérieur.

Si vous avez déjà nuget.exe, vous pouvez également utiliser nuget.exe update -self, mais cela nécessite également une copie existante de nuget.exe. Cette approche vous met également à jour vers la dernière version. Elle n’autorise pas l’utilisation d’une version spécifique.

Le point de terminaison tools.json est disponible pour résoudre le problème d’amorçage et pour contrôler la version de nuget.exe que vous téléchargez. Cela peut être utilisé dans des environnements CI/CD ou dans des scripts personnalisés pour découvrir et télécharger n’importe quelle version publiée de nuget.exe.

Le point de terminaison tools.json peut être récupéré à l’aide d’une demande HTTP non authentifiée (par ex. Invoke-WebRequest dans PowerShell ou wget). Il peut être analysé à l’aide d’un désérialiseur JSON et d’URL de téléchargement nuget.exe ultérieures peuvent également être récupérées à l’aide de demandes HTTP non authentifiées.

Le point de terminaison peut être récupéré à l’aide de la méthode GET :

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

Le schéma JSON du point de terminaison est disponible ici :

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

Response

La réponse est un document JSON contenant toutes les versions disponibles de nuget.exe.

L’objet racine JSON dispose de la propriété suivante :

Nom Type Requis
nuget.exe tableau d'objets Oui

Chaque objet dans le tableau nuget.exe contient les propriétés suivantes :

Nom Type Requise Notes
version chaîne Oui Chaîne SemVer 2.0.0
url string Oui URL absolue pour télécharger cette version de nuget.exe
phase string Oui Chaîne d’énumération
chargé string Oui Horodatage ISO 8601 approximatif du moment où la version a été rendue disponible

Les articles du tableau seront triés dans l’ordre décroissant, SemVer 2.0.0. Cette garantie est destinée à réduire la charge d’un client qui s’intéresse au numéro de version le plus élevé. Toutefois, cela signifie que la liste n’est pas triée dans l’ordre chronologique. Par exemple, si une version principale inférieure est prise en charge à une date ultérieure à une version majeure supérieure, cette version prise en charge n’apparaît pas en haut de la liste. Si vous souhaitez que la version la plus récente soit publiée par timestamp, triez simplement le tableau par la chaîne uploaded. Cela fonctionne car l’horodatage uploaded est au format ISO 8601 qui peut être trié chronologiquement à l’aide d’un tri lexicographique (c’est-à-dire un tri de chaîne simple).

La propriété stage indique la façon dont cette version de l’outil est vérifiée.

Étape Signification
EarlyAccessPreview Non encore visible sur la page web de téléchargement et doit être validée par les partenaires
Lancé Disponible sur le site de téléchargement, mais n’est pas encore recommandé pour une consommation à grande échelle
ReleasedAndBlessed Disponible sur le site de téléchargement et recommandé pour la consommation

Une approche simple pour avoir la dernière version recommandée consiste à prendre la première version de la liste dont la valeur stage est ReleasedAndBlessed. Cela fonctionne, car les versions sont triées dans l’ordre SemVer 2.0.0.

Le package NuGet.CommandLine sur nuget.org est généralement mis à jour uniquement avec les versions ReleasedAndBlessed.

Exemple de requête

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

Exemple de réponse

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