wake-up-neo.net

Ist .NET Core Runtime abwärtskompatibel mit früheren Versionen?

Wenn ich die neueste Version von .NET Core Runtime installiert habe (ab sofort ist dies Version 2.2.3):

https://dotnet.Microsoft.com/download/dotnet-core/2.2

Ist diese eine Installation abwärtskompatibel mit früheren Versionen von .NET Core?

Ist die obige Installation beispielsweise mit einer App kompatibel, die folgende Ziele verfolgt:

  • netcoreapp1.0
  • netcoreapp2.0
  • netcoreapp2.1
  • netcoreapp2.2

Mir ist klar, dass die .NET-Laufzeiten nebeneinander installiert werden können. Das beantwortet meine Frage jedoch nicht. Ist die Installation von one 2.2 abwärtskompatibel mit früheren Versionen, sodass keine zusätzlichen Laufzeiten erforderlich sind?

16
pixelbits

Bearbeiten .NET Core 3.x SDK wurde veröffentlicht. Im Gegensatz zu Version 2.2 und den vorherigen Versionen unterstützt diese Version nicht die Möglichkeit, frühere Laufzeiten (d. H. Netcoreapp2.2, netcoreapp2.1 usw.) als Ziel festzulegen.

tldr;

Ja. Durch die Installation von .NET Core Runtime 2.2.3 können Sie Apps ausführen, die auf netcoreapp2.0, netcoreapp2.1 und netcoreapp2.2 abzielen, ohne dass zusätzliche Laufzeiten installiert werden müssen.

Erklärung

Microsoft:

... NET Core-Laufzeitupdates sind mit einem Hauptversionsband wie 1.x und 2.x kompatibel.

Mit anderen Worten: (Kleinere Updates innerhalb derselben Hauptversion sind abwärtskompatibel.)

Microsoft:

Darüber hinaus bieten neuere Versionen des .NET Core SDK im Allgemeinen die Möglichkeit, Anwendungen, die auf frühere Versionen der Laufzeit abzielen, auf kompatible Weise zu erstellen

Mit anderen Worten: (Das neueste SDK kann auf frühere Laufzeiten abzielen.)

Microsoft:

Im Allgemeinen benötigen Sie nur das neueste SDK und die neueste Patch-Version der für Ihre Anwendung erforderlichen Laufzeiten.

Mit anderen Worten: (Im Allgemeinen sollten Sie nur das neueste SDK/die neueste Laufzeit installieren müssen.)

Microsoft:

Wenn Sie im Laufe der Zeit aktualisierte Versionen der .NET Core-Laufzeit und des SDK installieren, möchten Sie möglicherweise veraltete Versionen von .NET Core von Ihrem Computer entfernen. Durch das Entfernen älterer Versionen der Laufzeit kann sich die Laufzeit ändern, die zum Ausführen gemeinsam genutzter Framework-Anwendungen ausgewählt wurde

Mit anderen Worten: (Wenn Sie im Laufe der Zeit zusätzliche SDKs/Laufzeiten nebeneinander installieren, sollten Sie gelegentlich ältere Versionen zugunsten der neuesten entfernen.)

Quelle: https://docs.Microsoft.com/en-us/dotnet/core/versions/remove-runtime-sdk-versions?tabs=windows

.NET Core-Versionierung

Laut Dokumentation:

".NET Core 2.1" bezieht sich auf die Versionsnummer von .NET Core Runtime. Die .NET Core Runtime hat einen Major/Minor/Patch-Ansatz für die Versionierung, der auf die semantische Versionierung folgt.

Mit anderen Worten, .NET Core-Laufzeitversionen folgen dem Schema Semantic Versioning :

[Major]. [Minor]. [Patch]

Wo:

  • Wichtige Upgrades führen zu grundlegenden Änderungen
  • Kleinere Upgrades sind Feature-Upgrades, die mit früheren kleineren Releases abwärtskompatibel sind
  • Patch-Upgrades sind im Allgemeinen Fehlerbehebungen oder Sicherheitspatches für vorhandene Funktionen (auch abwärtskompatibel mit früheren Nebenversionen).

Die Antwort auf die obige Frage basiert also auf der semantischen Versionierung:

  • Wichtige Upgrades sind nicht abwärtskompatibel mit der Hauptversion vorherige Hauptversion
  • Kleinere und/oder Patch-Upgrades sind in der Version same Abwärtskompatibel

Nach diesem Verständnis zielen .NET Core-Apps beim Erstellen/Veröffentlichen/Wiederherstellen auf eine Hauptversion und einen Funktionsumfang ab, die durch die im Laufzeitnamen angegebenen Haupt-/Nebenversionsnummern angegeben werden. Also, netcoreapp2.2 ist abwärtskompatibel mit netcoreapp2.1 , was ist wiederum abwärtskompatibel mit netcoreapp2.0 . Alle sind jedoch nicht kompatibel mit netcoreapp1.x oder netcoreapp3.x .

Mit einer Installation von .NET Core 2.1.5 zur Laufzeit und unter der Annahme einer Framework-abhängigen Veröffentlichungsbereitstellung können Sie Apps ausführen, die auf Folgendes abzielen:

  • netcoreapp2.0
  • netcoreapp2.1

Aber nicht:

  • netcoreapp1.0 (inkompatibel)
  • netcoreapp2.2 (noch nicht unterstützt)

Wenn mehrere Laufzeiten installiert sind, wird die genaue Laufzeit basierend auf der zuletzt installierten Laufzeit mit dem höchsten Patch ausgewählt.

Über das SDK

Das SDK basiert nicht auf der semantischen Versionierung. Jedes SDK zielt jedoch auf eine maximale .NET Core-Laufzeit ab und unterstützt jede vorherige Version.

Das bedeutet, dass Sie nicht mehr als eine SDK auf Ihrem Build-Server installieren müssen, wenn Sie gegen mehrere Laufzeiten erstellen möchten (obwohl Sie dies könnten). Das SDK enthält bereits alle erforderlichen Laufzeiten, um Anwendungen auf der aktuellen Version (oder einer früheren Version) zu erstellen out-of-the-box. Wenn Sie beispielsweise das .NET Core 2.2.105 SDK installieren, können Sie für netcoreapp1.0, netcoreapp2.0, netcoreapp2.1 oder netcoreapp2.2 erstellen. Sie können jedoch nicht für .NET Core 2.3 oder 3.0 erstellen.

Ein Beispiel

Angenommen, ich habe einen Build-Server, auf dem das neueste .NET Core SDK installiert ist ( SDK 2.2.105 - 2.2.3 Runtime ).

Obwohl SDK 2.2.105 installiert ist, möchte ich möglicherweise eine .NET Core 2.1-App erstellen und veröffentlichen:

dotnet publish 
     /p:Configuration=Release -r win-x64 --self-contained false
     /p:IsWebConfigTransformDisabled=true --framework netcoreapp2.1
     /p:DebugSymbols=false /p:DebugType=None
  • /p:Configuration=Release - für Release konfigurieren
  • -r win-x64 - Ziel Windows-Bereitstellung (anstatt portabel)
  • --self-contained false - Framework-abhängige Bereitstellung (erfordert die Installation der Laufzeit auf dem Host)
  • /p:IsWebConfigTransformDisabled=true - transformieren Sie web.config nicht, um Fehler mit der von Visual Studio generierten Standard-web.config zu vermeiden (möglicherweise bei der Migration von 2.1 auf 2.2 erforderlich).
  • --framework netcoreapp2.1 - explizit auf ein Laufzeitframework abzielen
  • /p:DebugSymbols=false /p:DebugType=None - PDB-Dateien deaktivieren

Dieser Build kann auf einem Produktionsserver mit der neuesten Laufzeit installiert werden . NET Core Runtime + Hosting Bundle 2.2. - Es sind keine weiteren Laufzeiten (oder SDK) erforderlich

Hoffe das hilft jemand anderem

20
pixelbits

Einige Anwendungsbeispiele veranschaulichen das Verhalten, wenn Sie auf 2.0 abzielen:

  1. 2.0 ist angegeben. 2.0.5 ist die höchste installierte Patch-Version. 2.0.5 wird verwendet.
  2. 2.0 ist angegeben. Es sind keine 2.0. * -Versionen installiert. 1.1.1 ist die höchste installierte Laufzeit. Eine Fehlermeldung wird angezeigt.
  3. 2.0 ist angegeben. Es sind keine 2.0. * -Versionen installiert. 2.2.2 ist die höchste installierte 2.x-Laufzeitversion. 2.2.2 wird verwendet.
  4. 2.0 ist angegeben. Es sind keine 2.x-Versionen installiert. 3.0.0 ist installiert. Eine Fehlermeldung wird angezeigt.

Bitte beachten Sie den folgenden Link in Microsoft Docs Microsoft Link