nuget.exe バージョンを検出するための tools.json の

現在、マシン上の nuget.exe の最新バージョンを取得するための、スクリプト可能な方法がいくつか存在します。 たとえば、nuget.org からダウンロードして NuGet.CommandLine パッケージを抽出できます。この手法は、既に nuget.exe (nuget.exe install 用) を持っている必要があるか、基本的なファイル解凍ツールを使用して .nupkg を解凍し内部のバイナリを見つける必要があるため、やや複雑です。

既に nuget.exe がある場合は、nuget.exe update -self を使用することもできますが、この場合でも nuget.exe の既存のコピーが必要です。 このアプローチでは、バージョンも最新に更新されます。 特定のバージョンを指定して使用することはできません。

tools.json エンドポイントにより、ブートストラップの問題を解決することと、ダウンロードする nuget.exe のバージョンを制御することができます。 これは、製品版の nuget.exe を検出してダウンロードするために、CI/CD 環境またはカスタム スクリプトの中で使用できます。

tools.json エンドポイントは、非認証の HTTP 要求 (PowerShell の Invoke-WebRequestwget など) を使用してフェッチできます。 このエンドポイントは、JSON 逆シリアライザーを使用して解析が行えます。また、それ以降に nuget.exe をダウンロードする URL のフェッチにも、非認証の HTTP 要求が使用できます。

エンドポイントは、GET メソッドを使用してフェッチできます。

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

エンドポイントの JSON スキーマ については、次のページをご覧ください。

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

回答

使用可能なすべてのバージョンの nuget.exe を含む JSON ドキュメントが応答として返されます。

ルートの JSON オブジェクトには、以下のプロパティがあります。

名前 タイプ 必須
nuget.exe オブジェクトの配列 はい

nuget.exe 配列の各オブジェクトには、以下のプロパティが含まれます。

名前 タイプ 必須 メモ
version string はい SemVer 2.0.0 文字列
URL string はい このバージョンの nuget.exe をダウンロードするための絶対 URL
ステージ string はい 列挙型の文字列
uploaded string はい バージョンが利用可能になった時点の、おおよその ISO 8601 タイムスタンプ

配列内の項目は、降順で、SemVer 2.0.0 で並べ替えられます。 この保証は、最も高いバージョン番号に関心のあるクライアントの負担軽減を意図しています。 ただしこれにより、リストが時系列順に並べ替えられないということも起きます。 たとえば、下位メジャー バージョンのサービスが上位のメジャー バージョンのサービスより後の日付で行われる場合、サービスすべき下位のバージョンは一覧の先頭には表示されていません。 タイムスタンプごとにリリースされた最新バージョンが必要な場合は、単純に配列を uploaded 文字列で並べ替えます。 これが有効なのは、uploaded タイムスタンプが ISO 8601 形式であり、辞書的な並べ替え (つまり単純な文字列の並べ替え) を使用して時系列的に並べ替えられるためです。

stage プロパティは、このツールのバージョンがどのように検証されるかを示します。

段階 意味
EarlyAccessPreview ダウンロード Web ページにはまだ掲載されておらず、パートナーの検証が必要
リリース済み ダウンロード サイトでアクセスが可能なものの、使用のために広く普及することはまだ非推奨の状態
ReleasedAndBlessed ダウンロード サイトで利用でき、使用も推奨されている

最新かつ推奨されたバージョンを入手する簡単な方法の 1 つは、リスト内で stageReleasedAndBlessed の値になっている最初のバージョンを採用することです。 これが有効なのは、各バージョンが SemVer 2.0.0 の順序で並べ替えられているためです。

通常、nuget.org 上にある NuGet.CommandLine パッケージは、ReleasedAndBlessed のバージョンのみを使用して更新されます。

要求のサンプル

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

サンプル応答

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