Laden...

.NET Framework und .NET Standard inkompatibel

Erstellt von DeSharper vor 6 Jahren Letzter Beitrag vor 6 Jahren 2.161 Views
D
DeSharper Themenstarter:in
40 Beiträge seit 2016
vor 6 Jahren
.NET Framework und .NET Standard inkompatibel

Leider habe ich mit Infrastruktur-Themen sehr wenig Erfahrung und verstehe daher gerade nicht wirklich was hier passiert. Wahrscheinlich stelle ich mich an wie der letzte Mensch, aber ich weiß leider einfach nicht mehr weiter.
Im Prinzip möchte ich einfach nur eine Solution-Struktur, in der es ein Hauptprojekt gibt, dass dann auf verschiedene libraries zugreift. In meiner solution liegen (vereinfacht) zwei Projekte:

  • Main (winExe) Zielframework: .NET Framework 4.5.2
  • ViewModels (library) Zielframework: .NETStandard 1.4
    Wenn ich jetzt versuche in Main auf ViewModels zu referenzieren, bekomme ich die Fehlermeldung: "Für das Projekt [...]ViewModels.csproj ist kein mit .NETFramework, Version=v4.5.2 kompatibles Framework vorhanden". Das leuchtet mir noch ein, obwohl ich nicht ganz verstehe wie es entstanden ist. Ich hatte diese Konstellation schon häufiger, um das Zielframework hab ich mich nie gekümmert (hab in alten projekten nachgeschaut, da war es immer .NET Framework 4.x.x). Jedenfalls wollte ich jetzt ganz blauäugig einfach das Zielframework in "ViewModels" anpassen. Da stehen aber nur verschiedene .NET Standard versionen zur Verfügung. Also hab ich versucht mit Gewalt in der csproj von hand <TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> einzufügen. Jetzt steht im Projekt-Explorer "Migration erforderlich" und ich kann das Projekt nicht mehr öffnen. Langsam hab ich den Eindruck, ich könnte auf dem falschen Dampfer sein.
    Was mache ich falsch?
    Was ist der Unterschied zwischen .NET Framework und .NET Standard?
    Ist es tatsächlich nicht möglich etwas so elementares wie eine library in allen möglichen Projekten zu verwenden?
2.080 Beiträge seit 2012
vor 6 Jahren

.NET Standard ist sozusagen die Spezifikation, welche die einzelnen "echten" Frameworks implementieren müssen.
Dein Problem ist, dass .NET 4.5.2 einfach kein .NET Standard 1.4 implementiert. Du brauchst .NET Standard 1.2 oder .NET 4.6.1

Siehe hier: https://docs.microsoft.com/de-de/dotnet/standard/net-standard

PS:
Deine manuelle Anpassung machst Du besser wieder rückgängig 😄

NuGet Packages im Code auslesen
lock Alternative für async/await

Beim CleanCode zählen nicht die Regeln, sondern dass wir uns mit diesen Regeln befassen, selbst wenn wir sie nicht befolgen - hoffentlich nach reiflichen Überlegungen.

16.842 Beiträge seit 2008
vor 6 Jahren

Ehrlich gesagt wäre diese ganze Aufregung und der Frust nicht notwendig gewesen, wenn Du Dich einfach mal 10 Minuten mit dem .NET Standard beschäftigt hättest.

Das .NET Team um Immo Landwerth und Co hat ewig viele Dokumentation und sogar YouTube Videos dazu erstellt; WEIL eben dieses Thema so extrem wichtig ist.
Entwickler, die das aktuell ignorieren, werden richtig Probleme in den nächsten Jahren bekommen - zurecht.

.NET Standard ist vorstellbar als ein Interface:
während man früher gegen eine Framework-Version entwickelt hat, entwickelt man nun gegen eine Standard-Version.
Alle Runtimes, die diesen Standard implementieren, können auch den Code ausführen.

Ganz einfaches Prinzip: man muss es sich nur mal durchlesen.