バージョン番号の基礎
フォーマット
特定のバージョン番号のフォーマットはMajor.Minor.Patch [-Suffix]の形式であり、以下の要素があります:
- Major:大きな変更
- Minor:後方互換性のある新機能
- Patch:後方互換性のあるエラー修正
- Suffix(オプション):ハイフンに続く、Semantic Versioning or SemVer 1.0 conventionに従うプレリリースバージョンを示す文字列
1.0.1
6.11.1231
4.3.1-rc
2.2.44-beta1
ワイルドカード
| 記法 | 適用ルール | 説明 |
|---|---|---|
| 1.0 | x ≥ 1.0 | 最小バージョン、包含 |
| (1.0,) | x > 1.0 | 最小バージョン、排他 |
| [1.0] | x == 1.0 | 正確なバージョン一致 |
| (,1.0] | x ≤ 1.0 | 最大バージョン、包含 |
| (,1.0) | x < 1.0 | 最大バージョン、排他 |
| [1.0,2.0] | 1.0 ≤ x ≤ 2.0 | 正確な範囲、包含 |
| (1.0,2.0) | 1.0 < x < 2.0 | 正確な範囲、排他 |
| [1.0,2.0) | 1.0 ≤ x < 2.0 | 混合包含最小値と排他的最大値バージョン |
| (1.0) | 無効 | 無効 |
🔔 最も一般的なのは1番目の記法です
<PackageReference Include="Newtonsoft.Json" Version="12.0.3" />
バージョン番号の正規化
- 先行ゼロを無視する
1.00 -> 1.0
1.01.1 -> 1.1.1
1.00.0.1 -> 1.0.0.1
- バージョン番号の4番目の部分が0の場合、無視する
1.0.0.0 -> 1.0.0
1.0.01.0 -> 1.0.1
- ビルドメタデータを無視する
1.0.7+r3456 -> 1.0.7
❗packとrestore操作は、可能な限りバージョンを標準化し、すでに構築されたパッケージに対して、この標準化はパッケージ自体のバージョンには影響しません。依存関係を解決する際にNuGetがバージョンをマッチングする方法にのみ影響します。
依存関係の解決ルール
パッケージの復元には、依存関係を解決するために4つの主要なルールがあります。
ルール1:最低バージョン
-
バージョン制約が
1.0.0で、ソースには1.0.0と1.0.0-preのバージョンが存在する場合、優先的に1.0.0を返します。❗
1.0.0は1.0.0-preよりもバージョンが低いため、優先度が高く、1.0.0を返します。 -
バージョン制約が
1.0.0で、ソースには1.0.0と0.0.9のバージョンが存在する場合、優先的に1.0.0を返します。 -
バージョン制約が
[1.0.0]で、ソースに1.0.0のバージョンが存在しない場合、復元が失敗します。
ルール2:フローティングバージョン
フローティング依存関係バージョンは、*文字で指定されます。 例えば、6.0.*とすると、このバージョン規則は「最新の6.0.xバージョンを使用する」という意味になります。4.*は「最新の4.xバージョンを使用する」という意味になります。フローティングバージョンを使用すると、プロジェクトファイルの変更を最小限に抑えながら、依存関係の最新バージョンを維持することができます。
<PackageReference Include="Newtonsoft.Json" Version="12.0.*" />
ルール3: 最近のバージョンを優先する
アプリケーションのパッケージグラフに同じパッケージの異なるバージョンが含まれている場合、NuGet はグラフ内のアプリケーションに最も近いパッケージを選択し、他のすべてのパッケージを無視します。この動作により、アプリケーションは依存関係グラフ内の特定のパッケージバージョン ( package version ) を上書きできます。
あるApplicationは、PackageBとPackageAのVersion2.0に依存していますが、PackageAは、Version1.0のPackageBに依存しています。したがって、「フラット化された依存関係」でVersion2.0のPackageBが選択されます。
- Application
<PackageReference Include="PackageB" Version="2.0.0" />
<PackageReference Include="PackageA" Version="1.0.0" />
- PackageA(1.0.0)
<PackageReference Include="PackageB" Version="1.0.0" />
ルール4: 「いとこ依存関係」
NuGet は、アプリケーションから同じ距離にあるグラフで異なるパッケージバージョンを参照する場合、すべてのバージョン要件を満たす最低バージョンを使用します。
🔔 簡単に言えば、最低適用バージョンルールを依存関係ツリー全体に適用することです。
- Application
<PackageReference Include="PackageA" Version="1.0.0" />
<PackageReference Include="PackageC" Version="2.0.0" />
- PackageA
<PackageReference Include="PackageB" Version="1.0.0" />
- PackageC
<PackageReference Include="PackageB" Version="2.0.0" />
おわりに
このように、NuGetパッケージのバージョン依存関係の解決には、上記の4つのルールがあります。これらのルールにより、NuGetは、プロジェクトに必要な最新バージョンのパッケージを自動的に取得し、依存関係を解決することができます。