web-dev-qa-db-de.com

Funktioniert C # 7.0 für .NET 4.5?

Ich habe in Visual Studio 2017 RC ein Projekt erstellt, um zu überprüfen, ob ich in einem .NET Framework 4.5-Projekt neue C # 7.0-Sprachfunktionen verwenden kann. Es scheint mir, dass nach dem Verweisen auf System.ValueTuple NuGet, neue Tupel funktionieren einwandfrei. Gibt es noch etwas, woran ich denken sollte, oder wird das funktionieren?

Nach der Überprüfung System.ValueTuple NuGet-Abhängigkeiten, es sieht so aus, als ob .NET Framework 4.0 nicht unterstützt wird. Ist dies der Fall oder gibt es eine Möglichkeit, die neue Sprache auch in dieser Laufzeit zum Laufen zu bringen?

60

Gehen wir durch die neuen Funktionen in C # 7. :

  • Tuples: Das Paket System.ValueTuple enthält eine Version für das Profil portable-net40+sl4+win8+wp8. Das heißt, es ist für .NET 4.0 verwendbar. (Nicht sicher, warum Abhängigkeiten nur .Net 4.5 auflisten.)

    Wenn Sie Tupel in noch niedrigeren Versionen von .Net verwenden möchten, sollte dies weiterhin funktionieren, solange Sie den Code für ValueTuple und verwandte Typen zu Ihrem Projekt hinzufügen.

  • out Variablen, Musterabgleich, lokale Funktionen, Elemente mit mehr Ausdrucksstärke, throw Ausdrücke, Verbesserungen der numerischen Literal-Syntax: Alle diese Funktionen sind nur Syntaxzucker und benötigen keine neuen Funktionen aus dem Rahmen.

  • ref locals and returns: Diese Funktion legt in C # offen, was das Framework seit dem Start unterstützt. Daher sind auch hier keine Änderungen am Framework erforderlich.

  • Verallgemeinerte asynchrone Rückgabetypen: Um diese Funktion nutzen zu können, benötigen Sie einen Typ mit dem Attribut AsyncMethodBuilder, das sich in dem Paket System.Threading.Tasks.Extensions (zusammen mit einem solchen Typ) befindet. ValueTask<T>). Dieses Paket wird nur unter .Net 4.5 unterstützt. Für .Net 4.0 müssten Sie also die entsprechenden Typen selbst kompilieren. (Die Verwendung von awaiton .Net 4.0 erfordert ebenfalls Microsoft.Bcl.Async, Aber das ist nichts Neues.)

Zusammenfassend lässt sich sagen, dass C # 7.0 nach der Installation der erforderlichen Pakete auf .Net 4.5 und das meiste auch auf .Net 4.0 funktionieren sollte.

88
svick

Das Ausführen einer kompilierten C # 7-Anwendung unter .NET 4.5 sollte derzeit in Ordnung sein. Beachten Sie jedoch, dass das Ausführen von ASP.NET-Anwendungen, die die dynamische ASP.NET-Kompilierung verwenden, unter .NET 4.5 nicht funktioniert, da der C # 7.0-Compiler .NET 4.6 erfordert Lauf.

Quelle: https://github.com/dotnet/roslyn/issues/17908 :

Für den C # 7.0-Compiler (2.0 und höher) ist .NET 4.6 erforderlich

Die Informationen unter https://www.nuget.org/packages/Microsoft.Net.Compilers/2.0.1 (zur Unterstützung von .NET 4.5) scheinen veraltet zu sein.

23