Laden...

Wie hängen .NET Core, .NET Standard & .NET Framework zusammen?

Erstellt von Solix0x vor 4 Jahren Letzter Beitrag vor 4 Jahren 2.373 Views
S
Solix0x Themenstarter:in
12 Beiträge seit 2018
vor 4 Jahren
Wie hängen .NET Core, .NET Standard & .NET Framework zusammen?

Ich habe mich etwas schlau gemacht zu .NET Standard, .NET Core und .NET Framework. Wenn ich eine .NET Standard Klassenbibliothek erstelle, dann läuft es überall, wo C# läuft. .NET Framework läuft nur auf Windows, und .NET Core soll Crossplatform sein, aber mehr APIs haben als .NET Standard, ist dann aber nicht so gut in Sachen Crossplatform wie .NET Standard.

Jetzt habe ich gesehen, dass Span<T> nur in .NET Core und .NET Standard verfügbar ist. Siehe https://docs.microsoft.com/de-de/dotnet/api/system.span-1?view=netcore-3.1

Außerdem habe ich noch gehört, dass das .NET Framework für Windows die meisten APIs hat und dadurch Leute zu Windows ziehen soll und dies eine Strategie von Microsoft ist. Aber warum ist dann Span<T> nicht in .NET Framework? Ist der Sinn dahinter, die Leute dazu zu zwingen die Business-Logik möglichst ohne Abhängigkeiten von z.B. Windows zu entwickeln? Und ein .NET Framework WPF Projekt verwendet das dann?

Irgendwo muss da ein Detail noch sein, dass ich bisher falsch sehe oder noch nicht weiß.

16.834 Beiträge seit 2008
vor 4 Jahren

dann läuft es überall, wo C# läuft

Nein; davon abgesehen, dass C# eine Sprache und keine Laufzeitumgebung ist, kommt es auf die Versionen an.

.NET Standard kannst Du Dir als Interface vorstellen: das ist ein Vertrag, was .NET über mehrere Plattformen unterstützt.
.NET Standard existiert nur zur Compile-Zeit - aber nicht zur Laufzeit.

.NET Core, .NET Framework sind Implementierungen, die den .NET Standard beachten - also Runtimes.
Es werden also alle Features der jeweiligen .NET Standard Version unterstützt + Plattform-spezifisches Zeugs.

  • Bibliotheken entwickelst Du gegen den Standard; außer Du brauchst plattformspezifisches zeugs
  • Applikationen entwickelst Du gegen eine Runtime.

Du kannst also sicher gehen, dass eine Bibliothek, die gegen NET Standard 2.0 entwickelt wurde, auf allen Runtimes identisch läuft, die .NET Standard 2.0 auch implementiert haben.

Dadurch ist es möglich, dass es neue Plattformen gibt, die dann den .NET Standard erfüllen und Deine Bibliothek damit ohne Anpassungen kompatibel ist.

Aber warum ist dann Span<T> nicht in .NET Framework?

Keine .NET Framework Version unterstützt .NET Standard 2.1, sondern nur 2.0. Siehe hier
Es wird auch keine .NET Framework Version mehr geben, die 2.1 unterstützen wird.

Da Span<T> jedoch .NET Standard 2.1 haben will, kannst Du es eben im .NET Framework nicht nutzen.
Das liegt politisch auch daran, dass .NET Framework so viel Legacy Code hat, dass eine Implementierung von Span, die eine enorme Änderung des gesamten .NET Speicher-Managements bedeutet, nicht ohne Breaking Changes möglich ist.
Da .NET Framework ohnehin abgekündigt ist, gibt es hier auch keinen weiteren Invest mehr. Es ist gut, dass der Invest in die Zukunft von .NET gesteckt wird und nicht in die Vergangenheit.

Code Schaubild


public interface NetStandard20 { }
public interface NetStandard21 : NetStandard20  { }

public class NetFramework461 : NetStandard20 {}
public class NetCore30 : NetStandard21, NetCore21 {}  


Immo Landwerth hat dazu auch eine Menge YouTube Videos hochgeladen, beginnend mit .NET Standard - Introduction

S
Solix0x Themenstarter:in
12 Beiträge seit 2018
vor 4 Jahren

Danke für die Antwort 😃 Auch gut zu wissen, das .NET Framework nicht mehr so wichtig zu sein scheint

D
152 Beiträge seit 2013
vor 4 Jahren
6.911 Beiträge seit 2009
vor 4 Jahren

Hallo,

Da Span<T> jedoch .NET Standard 2.1 haben will, kannst Du es eben im .NET Framework nicht nutzen.

Mit System.Memory-Package kann Span<T> "and friends" auch in .NET Framework verwendet werden.

Wie Abt allerdings erwähnt hat wird es nicht so direkt wie in .NET Core unterstützt, da eben jede Menge am Runtime-Code (GC, EE, etc.) geändert werden müsste.
Somit wird Span für .NET Full "per Software emuliert" und ist nicht ganz so performant wie das direkt unterstütze in Core.

mfG Gü

Stellt fachliche Fragen bitte im Forum, damit von den Antworten alle profitieren. Daher beantworte ich solche Fragen nicht per PM.

"Alle sagten, das geht nicht! Dann kam einer, der wusste das nicht - und hat's gemacht!"