パッケージのバージョン管理Package versioning

特定のパッケージは、パッケージの識別子と正確なバージョン番号を使用して常に参照されます。A specific package is always referred to using its package identifier and an exact version number. たとえば、 Entity Framework nuget.org ではいくつか数十特定使用可能なパッケージをバージョンからまで4.1.10311バージョン6.1.3 (、最新の安定しました。リリース) などのさまざまなリリース前バージョンと6.2.0-beta1します。For example, Entity Framework on nuget.org has several dozen specific packages available, ranging from version 4.1.10311 to version 6.1.3 (the latest stable release) and a variety of pre-release versions like 6.2.0-beta1.

パッケージを作成する場合は、省略可能なプレリリース テキスト サフィックスを含む特定のバージョン番号を割り当てます。When creating a package, you assign a specific version number with an optional pre-release text suffix. その一方で、パッケージを利用する場合は、正確なバージョン番号または許容可能なバージョンの範囲のいずれかを指定できます。When consuming packages, on the other hand, you can specify either an exact version number or a range of acceptable versions.

このトピックの内容:In this topic:

バージョンの基本Version basics

特定のバージョン番号が、 Major.Minor.Patch [-サフィックス] コンポーネントは次の意味。A specific version number is in the form Major.Minor.Patch[-Suffix], where the components have the following meanings:

  • 主要な:互換性に影響する変更Major: Breaking changes
  • マイナー: 新機能、ただし下位互換性ありMinor: New features, but backwards compatible
  • パッチ: 下位互換性のバグ修正のみPatch: Backwards compatible bug fixes only
  • -サフィックス(省略可能): ハイフンが続けてリリース前のバージョンを示す文字列 (以下、セマンティック バージョン管理または SemVer 1.0 規則)。-Suffix (optional): a hyphen followed by a string denoting a pre-release version (following the Semantic Versioning or SemVer 1.0 convention).

例:Examples:

1.0.1
6.11.1231
4.3.1-rc
2.2.44-beta1

重要

nuget.org では、正確なバージョン番号が不足しているパッケージのアップロードを拒否します。nuget.org rejects any package upload that lacks an exact version number. バージョンを指定する必要があります、.nuspecまたはプロジェクト ファイルのパッケージを作成するために使用します。The version must be specified in the .nuspec or project file used to create the package.

プレリリース版Pre-release versions

厳密に言うと、パッケージ作成者は任意の文字列をサフィックスとして使用を NuGet がこのような任意のバージョンをプレリリースとして扱います、他の解釈も負わないものとは、リリース前のバージョンを示すためにします。Technically speaking, package creators can use any string as a suffix to denote a pre-release version, as NuGet treats any such version as pre-release and makes no other interpretation. つまり、すべての UI で、完全なバージョンの文字列、NuGet が表示されますが関係しているコンシューマーにサフィックスの意味の解釈を離れること。That is, NuGet displays the full version string in whatever UI is involved, leaving any interpretation of the suffix's meaning to the consumer.

ただし、通常、パッケージの開発者に、認識されている名前付け規則。That said, package developers generally follow recognized naming conventions:

  • -alpha:進行中の作業や実験に使用される通常アルファ リリース。-alpha: Alpha release, typically used for work-in-progress and experimentation.
  • -beta: ベータ リリース。一般的に、次に計画されているリリースの機能をすべて利用できますが、既知のバグが含まれている可能性があります。-beta: Beta release, typically one that is feature complete for the next planned release, but may contain known bugs.
  • -rc: リリース候補。一般的に、重大なバグが現れない限り、最終版 (安定版) となる可能性があるリリース。-rc: Release candidate, typically a release that's potentially final (stable) unless significant bugs emerge.

注意

NuGet 4.3.0 サポートSemVer 2.0.0とプレリリース番号をドット表記をサポートする1.0.1-build.23します。NuGet 4.3.0+ supports SemVer 2.0.0, which supports pre-release numbers with dot notation, as in 1.0.1-build.23. ドット表記は、バージョン 4.3.0 より前の NuGet ではサポートされていません。Dot notation is not supported with NuGet versions before 4.3.0. ようなフォームを使用して1.0.1-build23します。You can use a form like 1.0.1-build23.

パッケージ参照と複数のパッケージ バージョンのみが異なるサフィックスを解決するには、NuGet は最初に、サフィックスが付いていないバージョンを選択し、アルファベットの逆順のプレリリース版に優先順位を適用します。When resolving package references and multiple package versions differ only by suffix, NuGet chooses a version without a suffix first, then applies precedence to pre-release versions in reverse alphabetical order. たとえば、次のバージョンが示されている正確な順序で選択されます。For example, the following versions would be chosen in the exact order shown:

1.0.1
1.0.1-zzz
1.0.1-rc
1.0.1-open
1.0.1-beta
1.0.1-alpha2
1.0.1-alpha
1.0.1-aaa

セマンティック バージョニング 2.0.0Semantic Versioning 2.0.0

NuGet 4.3.0 と Visual Studio 2017 バージョン 15.3 以降、NuGet をサポートセマンティック バージョニング 2.0.0します。With NuGet 4.3.0+ and Visual Studio 2017 version 15.3+, NuGet supports Semantic Versioning 2.0.0.

以前のクライアントでは、SemVer v2.0.0 の特定のセマンティクスはサポートされていません。Certain semantics of SemVer v2.0.0 are not supported in older clients. NuGet では、次のステートメントのいずれかが true の場合、SemVer v2.0.0 を特定するパッケージのバージョンと見なされます。NuGet considers a package version to be SemVer v2.0.0 specific if either of the following statements is true:

  • プレリリース版は、ラベルはドットで区切られた、たとえば、 1.0.0-alpha.1The pre-release label is dot-separated, for example, 1.0.0-alpha.1
  • バージョンは、ビルド メタデータ、たとえば、 1.0.0+githashThe version has build-metadata, for example, 1.0.0+githash

Nuget.org の場合、次のステートメントのいずれかが true の場合、パッケージは SemVer v2.0.0 パッケージとして定義されます。For nuget.org, a package is defined as a SemVer v2.0.0 package if either of the following statements is true:

  • パッケージのバージョンでは、上記で定義された SemVer v2.0.0 の準拠が準拠していない SemVer v1.0.0 です。The package's own version is SemVer v2.0.0 compliant but not SemVer v1.0.0 compliant, as defined above.
  • パッケージの依存関係のバージョン範囲には SemVer v2.0.0 の準拠が準拠していない SemVer v1.0.0; 上で定義した、最小値または最大バージョンたとえば、 [1.0.0-alpha.1,) します。Any of the package's dependency version ranges has a minimum or maximum version that is SemVer v2.0.0 compliant but not SemVer v1.0.0 compliant, defined above; for example, [1.0.0-alpha.1, ).

SemVer v2.0.0 固有のパッケージを nuget.org にアップロードする場合、パッケージは、以前のクライアントを非表示と次の NuGet クライアントのみに使用可能なは。If you upload a SemVer v2.0.0-specific package to nuget.org, the package is invisible to older clients and available to only the following NuGet clients:

  • NuGet 4.3.0NuGet 4.3.0+
  • Visual Studio 2017 バージョン 15.3 以降Visual Studio 2017 version 15.3+
  • Visual Studio 2015 とNuGet VSIX v3.6.0Visual Studio 2015 with NuGet VSIX v3.6.0
  • dotnetdotnet
    • dotnetcore.exe (.NET SDK 2.0.0+)dotnetcore.exe (.NET SDK 2.0.0+)

サード パーティ製のクライアント:Third-party clients:

  • JetBrains RiderJetBrains Rider
  • バージョン 5.0 以降のパケットを作成します。Paket version 5.0+

バージョン範囲およびワイルドカードVersion ranges and wildcards

パッケージの依存関係を参照する、NuGet では、次のとおり、バージョン範囲を指定する間隔の表記を使用してサポートしています。When referring to package dependencies, NuGet supports using interval notation for specifying version ranges, summarized as follows:

NotationNotation 適用されるルールApplied rule 説明Description
11.0 x ≥ 1.0x ≥ 1.0 包括的な最小のバージョンMinimum version, inclusive
(1.0,)(1.0,) x > 1.0x > 1.0 排他の最小バージョンMinimum version, exclusive
[1.0][1.0] x = 1.0x == 1.0 バージョンに一致します。Exact version match
(,1.0](,1.0] x ≤ 1.0x ≤ 1.0 包括の最大バージョンMaximum version, inclusive
(,1.0)(,1.0) x < 1.0x < 1.0 排他の最大バージョンMaximum version, exclusive
[1.0,2.0][1.0,2.0] 1.0 ≤ ≤ 2.01.0 ≤ x ≤ 2.0 正確な範囲は、包含Exact range, inclusive
(1.0,2.0)(1.0,2.0) 1.0 < x < 2.01.0 < x < 2.0 正確な範囲は、排他的Exact range, exclusive
[1.0,2.0)[1.0,2.0) 1.0 ≤ x < 2.01.0 ≤ x < 2.0 包括的な最小値と排他最大バージョンが混在Mixed inclusive minimum and exclusive maximum version
(1.0)(1.0) 無効なinvalid 無効なinvalid

PackageReference 形式を使用して、NuGet もサポートしています、ワイルドカードの表記を使用して*メジャー、マイナー、パッチ、および、番号のプレリリースのサフィックス部分。When using the PackageReference format, NuGet also supports using a wildcard notation, *, for Major, Minor, Patch, and pre-release suffix parts of the number. ワイルドカードはサポートされていません、packages.config形式。Wildcards are not supported with the packages.config format.

注意

バージョン範囲を解決するときに、プレリリース版は含まれません。Pre-release versions are not included when resolving version ranges. プレリリース版ワイルドカードを使用する場合に含まれる (*)。Pre-release versions are included when using a wildcard (*). バージョン範囲 [1.0,2.0] などは含まれませんが、2.0 ベータ版、ワイルドカードの表記法_2.0-*_ は。The version range [1.0,2.0], for example, does not include 2.0-beta, but the wildcard notation 2.0-* does. 参照してください発行 912プレリリース版のワイルドカードの詳細についてはします。See issue 912 for further discussion on pre-release wildcards.

使用例Examples

常にプロジェクト ファイルで、バージョン、またはパッケージの依存関係のバージョンの範囲を指定packages.configファイル、および.nuspecファイル。Always specify a version or version range for package dependencies in project files, packages.config files, and .nuspec files. バージョンまたはバージョン範囲、NuGet を使用せず 2.8.x 以前選択最新バージョンの使用可能なパッケージを依存関係を解決するときに、NuGet 3.x を後で、最小のパッケージ バージョンを選択します。Without a version or version range, NuGet 2.8.x and earlier chooses the latest available package version when resolving a dependency, whereas NuGet 3.x and later chooses the lowest package version. バージョンまたはバージョン範囲がこの不確実性を回避を指定します。Specifying a version or version range avoids this uncertainty.

プロジェクト ファイル (PackageReference) の参照References in project files (PackageReference)

<!-- Accepts any version 6.1 and above. -->
<PackageReference Include="ExamplePackage" Version="6.1" />

<!-- Accepts any 6.x.y version. -->
<PackageReference Include="ExamplePackage" Version="6.*" />
<PackageReference Include="ExamplePackage" Version="[6,7)" />

<!-- Accepts any version above, but not including 4.1.3. Could be
     used to guarantee a dependency with a specific bug fix. -->
<PackageReference Include="ExamplePackage" Version="(4.1.3,)" />

<!-- Accepts any version up below 5.x, which might be used to prevent pulling in a later
     version of a dependency that changed its interface. However, this form is not
     recommended because it can be difficult to determine the lowest version. -->
<PackageReference Include="ExamplePackage" Version="(,5.0)" />

<!-- Accepts any 1.x or 2.x version, but not 0.x or 3.x and higher. -->
<PackageReference Include="ExamplePackage" Version="[1,3)" />

<!-- Accepts 1.3.2 up to 1.4.x, but not 1.5 and higher. -->
<PackageReference Include="ExamplePackage" Version="[1.3.2,1.5)" />

参照packages.config:References in packages.config:

packages.config、すべての依存関係がリストされ、正確なversionパッケージを復元するときに使用される属性です。In packages.config, every dependency is listed with an exact version attribute that's used when restoring packages. allowedVersions属性は、パッケージを更新する可能性があるバージョンを制限する更新操作中にのみ使用します。The allowedVersions attribute is used only during update operations to constrain the versions to which the package might be updated.

<!-- Install/restore version 6.1.0, accept any version 6.1.0 and above on update. -->
<package id="ExamplePackage" version="6.1.0" allowedVersions="6.1.0" />

<!-- Install/restore version 6.1.0, and do not change during update. -->
<package id="ExamplePackage" version="6.1.0" allowedVersions="[6.1.0]" />

<!-- Install/restore version 6.1.0, accept any 6.x version during update. -->
<package id="ExamplePackage" version="6.1.0" allowedVersions="[6,7)" />

<!-- Install/restore version 4.1.4, accept any version above, but not including, 4.1.3.
     Could be used to guarantee a dependency with a specific bug fix. -->
<package id="ExamplePackage" version="4.1.4" allowedVersions="(4.1.3,)" />

<!-- Install/restore version 3.1.2, accept any version up below 5.x on update, which might be
     used to prevent pulling in a later version of a dependency that changed its interface.
     However, this form is not recommended because it can be difficult to determine the lowest version. -->
<package id="ExamplePackage" version="3.1.2" allowedVersions="(,5.0)" />

<!-- Install/restore version 1.1.4, accept any 1.x or 2.x version on update, but not
     0.x or 3.x and higher. -->
<package id="ExamplePackage" version="1.1.4" allowedVersions="[1,3)" />

<!-- Install/restore version 1.3.5, accepts 1.3.2 up to 1.4.x on update, but not 1.5 and higher. -->
<package id="ExamplePackage" version="1.3.5" allowedVersions="[1.3.2,1.5)" />

参照.nuspecファイルReferences in .nuspec files

version属性、<dependency>要素には、依存関係として受け入れ可能な範囲のバージョンがについて説明します。The version attribute in a <dependency> element describes the range versions that are acceptable for a dependency.

<!-- Accepts any version 6.1 and above. -->
<dependency id="ExamplePackage" version="6.1" />

<!-- Accepts any version above, but not including 4.1.3. Could be
     used to guarantee a dependency with a specific bug fix. -->
<dependency id="ExamplePackage" version="(4.1.3,)" />

<!-- Accepts any version up below 5.x, which might be used to prevent pulling in a later
     version of a dependency that changed its interface. However, this form is not
     recommended because it can be difficult to determine the lowest version. -->
<dependency id="ExamplePackage" version="(,5.0)" />

<!-- Accepts any 1.x or 2.x version, but not 0.x or 3.x and higher. -->
<dependency id="ExamplePackage" version="[1,3)" />

<!-- Accepts 1.3.2 up to 1.4.x, but not 1.5 and higher. -->
<dependency id="ExamplePackage" version="[1.3.2,1.5)" />

正規化されたバージョン番号Normalized version numbers

注意

これは、NuGet 3.4 以降の互換性に影響する変更です。This is a breaking change for NuGet 3.4 and later.

を再インストールまたは復元操作、、のインストール中に、リポジトリからパッケージを取得するときに NuGet 3.4 以降はバージョン番号を、次のように扱われます。When obtaining packages from a repository during install, reinstall, or restore operations, NuGet 3.4+ treats version numbers as follows:

  • バージョン番号から先頭のゼロは削除されます。Leading zeroes are removed from version numbers:

      1.00 is treated as 1.0
      1.01.1 is treated as 1.1.1
      1.00.0.1 is treated as 1.0.0.1
    
  • バージョン番号の 4 番目の部分のゼロは省略されます。A zero in the fourth part of the version number will be omitted

      1.0.0.0 is treated as 1.0.0
      1.0.01.0 is treated as 1.0.1
    

この正規化では、パッケージ自体; のバージョン番号には影響しませんこれは、のみ方法 NuGet と一致するバージョンの依存関係を解決するときに影響します。This normalization does not affect the version numbers in the packages themselves; it affects only how NuGet matches versions when resolving dependencies.

ただし、NuGet パッケージのリポジトリでは、パッケージのバージョンの重複を防ぐためには、NuGet と同様にこれらの値を扱う必要があります。However, NuGet package repositories must treat these values in the same way as NuGet to prevent package version duplication. バージョンを含むリポジトリしたがって1.0パッケージの必要がありますもホストしていないバージョン1.0.0独立した別のパッケージとして。Thus a repository that contains version 1.0 of a package should not also host version 1.0.0 as a separate and different package.