2017-02-27 5 views
40

Ich habe ein Projekt in Visual Studio 2017 RC erstellt, um zu überprüfen, ob ich neue C# 7.0-Sprachenfeatures in einem .NET Framework 4.5-Projekt verwenden kann. Es scheint mir, dass nach der Referenz System.ValueTuple NuGet, neue Tupel gut funktionieren. Gibt es noch etwas, worüber ich nachdenken sollte, oder wird das funktionieren?Funktioniert C# 7.0 für .NET 4.5?

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

+0

Ich denke, dass Sie mindestens .NET 4.6.1 benötigen, aber Sie könnten mit 4.5. –

Antwort

61

die durch the features new in C# 7.0 Let go:

  • Tupeln: The System.ValueTuple package hat eine Version für das portable-net40+sl4+win8+wp8 Profil. Das bedeutet, dass es auf .Net 4.0 verwendbar ist. (Nicht sicher, warum Abhängigkeiten nur .Net 4.5 auflisten.)

    Wenn Sie Tupel auf noch niedrigeren Versionen von .Net verwenden wollten, sollte es noch funktionieren, solange Sie zu Ihrem Projekt hinzufügen.

  • out Variablen, Pattern-Matching, lokale Funktionen, mehr Ausdruck reiche Mitglieder, throw Ausdrücke, numerische Literalsyntax Verbesserungen: Alle diese Funktionen sind nur Syntax Zucker, so dass sie brauchen keine neuen Funktionen aus dem Rahmen.

  • ref Locals und Returns: Diese Funktion macht in C# sichtbar, was das Framework seit dem Start unterstützt, so dass auch hier keine Änderungen am Framework erforderlich sind.

  • Generalized Asynchron-Rückgabetypen: Um diese Funktion nutzen zu können, benötigen Sie einen Typ, der die AsyncMethodBuilder Attribut hat, die in the System.Threading.Tasks.Extensions package ist (zusammen mit einer solchen Art, ValueTask<T>). Dieses Paket wird nur von .Net 4.5 unterstützt. Für .Net 4.0 müssen Sie also the relevant types selbst kompilieren. (Mit await auf .Net 4.0 erfordert auch Microsoft.Bcl.Async, aber das ist nichts Neues.)

Fazit: Alle C# 7.0 sollte nach der Installation der erforderlichen Pakete auf .NET 4.5 arbeiten und das meiste davon sollte funktionieren auf .Net 4.0 auch.

11

Das Ausführen einer kompilierten C# 7-Anwendung unter .NET 4.5 sollte in diesem Moment in Ordnung sein, aber beachten Sie, dass das Ausführen von ASP.NET-Anwendungen mit ASP.NET Dynamic Compilation unter .NET 4.5 nicht funktioniert, da der C# 7.0-Compiler erfordert .NET 4.6 zu laufen.

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

Der C# 7.0-Compiler (2.0 und höher) erfordert 4.6 .NET

Die Informationen auf https://www.nuget.org/packages/Microsoft.Net.Compilers/2.0.1 laufen (über .NET 4.5 unterstützt) scheint veraltet zu sein .

+1

Die Frage ist nicht zum Ausführen des Compilers, sondern zum Ausführen des kompilierten Codes. – svick

+1

Auch [die Information in dieser Paketbeschreibung ist tatsächlich falsch und wird in der nächsten Version des Pakets behoben werden] (https://github.com/dotnet/roslyn/pull/17942). – svick

+0

Wenn Ihre Anwendung dynamische Kompilierung (z. B. asp.net gehostete App) verwendet, bedeutet dies, dass Sie diese Anwendung auf .NET 4 nicht hosten können.5, aber Sie sind richtig, einige Anwendungen, die mit dem C# 7 Compiler kompiliert werden, funktionieren - ich werde meine Antwort in Kürze aktualisieren. –