PaketversionsverwaltungPackage versioning

Ein bestimmtes Paket wird immer mithilfe der Paket-ID und eine genaue Versionsnummer bezeichnet.A specific package is always referred to using its package identifier and an exact version number. Z. B. Entity Framework auf nuget.org sind mehrere Dutzend bestimmte Pakete verfügbar ist, wird im Bereich von Version 4.1.10311 auf Version 6.1.3 (die stabile Version) und wie Sie eine Vielzahl von Vorabversionen 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.

Wenn Sie ein Paket zu erstellen, weisen Sie eine spezifische Versionsnummer mit einem optionalen Vorabversion-Text-Suffix an.When creating a package, you assign a specific version number with an optional pre-release text suffix. Bei der Nutzung von Paketen können auf der anderen Seite Sie entweder eine genaue Versionsnummer oder einen Bereich von zulässigen Versionen angeben.When consuming packages, on the other hand, you can specify either an exact version number or a range of acceptable versions.

In diesem Thema:In this topic:

Version-GrundlagenVersion basics

Die Versionsnummer wird in der Form Hauptversion.Nebenversion.Patch [-Suffix], in dem die Komponenten die folgenden Bedeutungen haben:A specific version number is in the form Major.Minor.Patch[-Suffix], where the components have the following meanings:

  • Wichtige: Breaking ChangesMajor: Breaking changes
  • Kleinere: Neue Funktionen, aber dennoch abwärtskompatibelMinor: New features, but backwards compatible
  • Patch: Nur abwärtskompatible FehlerkorrekturenPatch: Backwards compatible bug fixes only
  • -Suffix (optional): ein Bindestrich gefolgt von eine Zeichenfolge, die eine Vorabversion (folgenden der semantische Versionierung bzw. SemVer-1.0-Konvention).-Suffix (optional): a hyphen followed by a string denoting a pre-release version (following the Semantic Versioning or SemVer 1.0 convention).

Beispiele:Examples:

1.0.1
6.11.1231
4.3.1-rc
2.2.44-beta1

Wichtig

"NuGet.org" lehnt alle Hochladen des Anwendungspakets, das eine genaue Versionsnummer fehlt.nuget.org rejects any package upload that lacks an exact version number. Die Version muss angegeben werden, der .nuspec oder einer Projektdatei verwendet, um das Paket zu erstellen.The version must be specified in the .nuspec or project file used to create the package.

VorabversionenPre-release versions

Technisch gesehen können Paketersteller eine beliebige Zeichenfolge als Suffix um eine Vorabversion, wie NuGet eine solchen Version als Vorabversion behandelt und kann keine anderen Interpretation zu kennzeichnen.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. D. h. NuGet zeigt die vollständige Version in die jeweilige Benutzeroberfläche, die eine Zeichenfolge ist erforderlich, sodass jede Interpretation von Bedeutung für das Suffix des an dem Consumer.That is, NuGet displays the full version string in whatever UI is involved, leaving any interpretation of the suffix's meaning to the consumer.

Dies bedeutet, dass Paketentwickler allgemein anerkannte Namenskonventionen zu halten folgen:That said, package developers generally follow recognized naming conventions:

  • -alpha: Alpha-Release, in der Regel für die laufende Arbeit und experimentieren verwendet.-alpha: Alpha release, typically used for work-in-progress and experimentation.
  • -beta: Beta-Release; in der Regel ein Release, das alle Features des nächsten geplanten Releases besitzt, aber womöglich bereits bekannte Fehler enthält.-beta: Beta release, typically one that is feature complete for the next planned release, but may contain known bugs.
  • -rc: Release Candidate (RC); in der Regel ein stabiles Release, das veröffentlicht werden könnte, sofern keine erheblichen Fehler mehr auftreten.-rc: Release candidate, typically a release that's potentially final (stable) unless significant bugs emerge.

Hinweis

NuGet 4.3.0 unterstützt SemVer 2.0.0, die Vorabversion von Zahlen mit Punktnotation, wie in unterstützt 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. Die Punktnotation wird für NuGet-Versionen vor Version 4.3.0 nicht unterstützt.Dot notation is not supported with NuGet versions before 4.3.0. Sie können eine Formulierung wie 1.0.1-build23.You can use a form like 1.0.1-build23.

Beim Auflösen von, dass Paketverweise und mehrere Versionen des Pakets nur durch das Suffix unterscheiden, NuGet wählt zuerst eine Version ohne Suffix, und dann Vorrang vor in umgekehrter alphabetischer Reihenfolge Vorabversionen gilt.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. Beispielsweise würde die folgenden Versionen der angegebenen Reihenfolge ausgewählt werden: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

Semantic Versioning 2.0.0Semantic Versioning 2.0.0

NuGet 4.3.0 und Visual Studio 2017 Version 15.3 und höher, unterstützt NuGet Semantic Versioning 2.0.0.With NuGet 4.3.0+ and Visual Studio 2017 version 15.3+, NuGet supports Semantic Versioning 2.0.0.

Bestimmte Semantik der SemVer Version 2.0.0 und werden in älteren Clients nicht unterstützt.Certain semantics of SemVer v2.0.0 are not supported in older clients. NuGet berücksichtigt eine Paketversion Version SemVer 2.0.0 bestimmte sein, wenn eine der folgenden Aussagen zutrifft:NuGet considers a package version to be SemVer v2.0.0 specific if either of the following statements is true:

  • Die Bezeichnung für die Vorabversion ist z. B. Punkte getrennte 1.0.0-alpha.1The pre-release label is dot-separated, for example, 1.0.0-alpha.1
  • Die Version weist die Build-Metadaten, z. B. 1.0.0+githashThe version has build-metadata, for example, 1.0.0+githash

Für "nuget.org" wird ein Paket als SemVer Version 2.0.0-Paket definiert, wenn eine der folgenden Aussagen zutrifft:For nuget.org, a package is defined as a SemVer v2.0.0 package if either of the following statements is true:

  • Die Version des Pakets ist die Version 2.0.0 SemVer kompatibel, aber nicht SemVer v1.0.0 kompatibel ist, wie oben bereits definiert.The package's own version is SemVer v2.0.0 compliant but not SemVer v1.0.0 compliant, as defined above.
  • Keines der Paket Abhängigkeit von versionsbereichen verfügt über eine minimale oder maximale Version, die Version 2.0.0 SemVer kompatibel, aber nicht SemVer v1.0.0 konform ist oben definierten; z. B. [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, ).

Wenn Sie ein SemVer-Version 2.0.0-spezifische-Paket auf nuget.org hochladen, ist das Paket für ältere Clients nicht sichtbar und nur die folgenden NuGet-Clients zur Verfügung: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 Version 15.3 und höherVisual Studio 2017 version 15.3+
  • Visual Studio 2015 mit NuGet-VSIX v3.6.0Visual Studio 2015 with NuGet VSIX v3.6.0
  • dotnetdotnet
    • dotnetcore.exe (2.0.0+ .NET SDK)dotnetcore.exe (.NET SDK 2.0.0+)

Clients von Drittanbietern:Third-party clients:

  • Rider von JetBrainsJetBrains Rider
  • Paket-Abhängigkeits Version 5.0 und höherPaket version 5.0+

Versionsbereichen und PlatzhalterVersion ranges and wildcards

In Bezug auf die paketabhängigkeiten unterstützt NuGet an, mit Intervall Notation für die Angabe von versionsbereichen, wie folgt zusammengefasst:When referring to package dependencies, NuGet supports using interval notation for specifying version ranges, summarized as follows:

NotationNotation Angewendete RegelApplied rule BeschreibungDescription
1.01.0 X ≥ 1.0x ≥ 1.0 Mindestens erforderliche Version, einschließlichMinimum version, inclusive
(1.0,)(1.0,) x > 1.0x > 1.0 Mindestens erforderliche Version, exklusivMinimum version, exclusive
[1.0][1.0] x == 1.0x == 1.0 Übereinstimmung mit der genauen versionExact version match
(,1.0](,1.0] x ≤ 1.0x ≤ 1.0 Maximale Version, einschließlichMaximum version, inclusive
(,1.0)(,1.0) x < 1.0x < 1.0 Maximale Version, exklusivMaximum version, exclusive
[1.0,2.0][1.0,2.0] 1.0 ≤ x ≤ 2.01.0 ≤ x ≤ 2.0 Genaue Bereich, inklusivExact range, inclusive
(1.0,2.0)(1.0,2.0) 1.0 < x < 2.01.0 < x < 2.0 Genaue Bereich, exklusivExact range, exclusive
[1.0,2.0)[1.0,2.0) 1.0 ≤ x < 2.01.0 ≤ x < 2.0 Gemischte inklusive Mindest- und exklusive-MaximalversionMixed inclusive minimum and exclusive maximum version
(1.0)(1.0) Ungültiginvalid Ungültiginvalid

Wenn Sie das PackageReference-Format zu verwenden, NuGet unterstützt auch die Verwendung eines Platzhalterzeichens *für Haupt-, neben-, Patch und Suffix der Vorabversion von Teilen der Zahl.When using the PackageReference format, NuGet also supports using a wildcard notation, *, for Major, Minor, Patch, and pre-release suffix parts of the number. Platzhalter werden nicht unterstützt, mit der packages.config Format.Wildcards are not supported with the packages.config format.

Hinweis

Vorabversionen sind nicht enthalten, beim Auflösen von versionsbereichen.Pre-release versions are not included when resolving version ranges. Vorabversionen sind enthalten, wenn ein Platzhalterzeichen verwendet (*).Pre-release versions are included when using a wildcard (*). Der Versionsbereich [1.0,2.0], z. B. enthält keine 2.0-Betaversion, aber die Notation für Platzhalter 2.0-* ist.The version range [1.0,2.0], for example, does not include 2.0-beta, but the wildcard notation 2.0-* does. Finden Sie unter ausgeben 912 Weitere erläuterungen zur Vorabversion Platzhalter.See issue 912 for further discussion on pre-release wildcards.

BeispieleExamples

Geben Sie immer eine Version oder ein Versionsbereich für paketabhängigkeiten in Projektdateien, packages.config -Dateien und .nuspec Dateien.Always specify a version or version range for package dependencies in project files, packages.config files, and .nuspec files. Ohne eine Version oder ein Versionsbereich, NuGet 2.8.x und zuvor wählt die neueste verfügbare Paketversion beim Auflösen von einer Abhängigkeit, während NuGet 3.x und höher wählt die niedrigste Paketversion.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. Eine Version oder die Version, dass der Bereich dieser Ungewissheit vermeidet angibt.Specifying a version or version range avoids this uncertainty.

Verweisen in Projektdateien (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)" />

Verweise in packages.config:References in packages.config:

In packages.config, jede Abhängigkeit wird aufgeführt, mit einer genauen version -Attribut, das verwendet wird, wenn Pakete wiederhergestellt.In packages.config, every dependency is listed with an exact version attribute that's used when restoring packages. Die allowedVersions Attribut wird nur während der Update-Vorgänge verwendet, um die Versionen zu beschränken, der das Paket aktualisiert werden kann.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)" />

Verweise in .nuspec DateienReferences in .nuspec files

Die version -Attribut in einem <dependency> -Element beschreibt die Bereichs-Versionen, die für eine Abhängigkeit zulässig sind.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)" />

Normalisierte VersionsnummernNormalized version numbers

Hinweis

Dies ist eine wichtige Änderung für NuGet 3.4 und höher.This is a breaking change for NuGet 3.4 and later.

Beim Abrufen von Paketen aus einem Repository, während der Installation neu installieren oder Wiederherstellungsvorgänge verwendet werden, werden Versionsnummern in NuGet 3.4 und höher wie folgt behandelt:When obtaining packages from a repository during install, reinstall, or restore operations, NuGet 3.4+ treats version numbers as follows:

  • Führende Nullen werden von Versionsnummern entfernt: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
    
  • Eine NULL im vierten Teil der Versionsnummer werden weggelassenA 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
    

Diese Normalisierung wirkt sich nicht auf die Versionsnummern in die Pakete selbst aus; Es wirkt sich nur wie NuGet Versionen entspricht beim Auflösen von Abhängigkeiten auf.This normalization does not affect the version numbers in the packages themselves; it affects only how NuGet matches versions when resolving dependencies.

Allerdings müssen NuGet Package-Repositorys, diese Werte in die gleiche Weise wie NuGet, um zu verhindern, dass bei der Duplizierung der Paket-Version behandeln.However, NuGet package repositories must treat these values in the same way as NuGet to prevent package version duplication. Daher ein Repository, die Version enthält 1.0 eines Pakets sollte zudem hostet keine Version 1.0.0 als separate und unterschiedliche-Paket.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.