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-WebRequest
や wget
など) を使用してフェッチできます。 このエンドポイントは、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 つは、リスト内で stage
が ReleasedAndBlessed
の値になっている最初のバージョンを採用することです。 これが有効なのは、各バージョンが 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"
}
]
}