Ich habe meine ASP.NET Mvc 5-Webanwendung aktualisiert, um die neuen c # 8.0-Funktionen über Visual Studio 2019 zu verwenden, und alles funktioniert einwandfrei, bis ich versuche, diese neuen Funktionen in einer Razor-Ansicht zu verwenden.
Wenn ich zum Beispiel versuche, den neuen Schalterausdruck zu verwenden:
@{
ViewBag.Title = "About";
var foo = 1;
var bar = foo switch
{
1 => "one",
2 => "two",
_ => string.Empty
};
}
<h2>@ViewBag.Title.</h2>
<h3>@ViewBag.Message</h3>
<p>Use this area to provide additional information.</p>
Der Compiler wird sich nicht beschweren, bis ich versuche, die Seite zu erreichen, was mir einen Kompilierungsfehler gibt.
Ich vermute, dass Microsoft.CodeDom.Providers.DotNetCompilerPlatform
das aktualisiert werden muss, aber es scheint, dass kein Update verfügbar ist.
Gibt es eine Möglichkeit, c # 8.0-Sprachfunktionen in Razor-Ansichten zu verwenden?
c#
asp.net-mvc
razor
Dbraillon
quelle
quelle
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Antworten:
Das .net Framework unterstützt C # 7.3, weshalb Sie Ihre Razor View nicht zum Laufen bringen können
.net Core 3 unterstützt C # 8 und ich konnte Ihr Beispiel mit einer .net Core 3 MVC-App zum Laufen bringen.
Sie können hier einen Blick darauf werfen: https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/configure-language-version
Ich hoffe das obige hilft :)
quelle
LangVersion
in meinem csproj. Ich kann sogar die nullbare Funktion verwenden. Und der vom OP vorgeschlagene Code wird kompiliert und läuft einwandfrei. Es ist also interessant, warum dies für eine ASP.NET-Anwendung nicht funktioniert.<MSNetCompilersNuGetPackageLatestVersion>3.3.1</MSNetCompilersNuGetPackageLatestVersion>
. Sie können Ihr eigenes Nuget-Paket aus Quellen erstellen und verwenden (oder PR erstellen und Feedback erhalten, in der Hoffnung, es in Master zusammenzuführen).OK, es gibt einige Dinge, die zuerst geklärt werden müssen.
Entsprechend dieser Antwort ist die C # -Sprachenversion an das Framework gebunden, und C # 8.0 ist für alle Sprachen, die .Net Standard 2.1 unterstützen, vollständig verfügbar. .NET Framework 4.7.2 und niedriger unterstützt .NET Standard 2.1 nicht und wird in Zukunft nicht mehr der Fall sein.
In der Zwischenzeit gibt es eine Möglichkeit, C # 8.0 zu verwenden, wenn Sie die LangVersion in einer .csproj-Projektdatei angeben:
Dadurch wird C # 8.0 aktiviert und einige nicht gebundene Framework-Funktionen stehen Ihnen zur Verfügung. Überprüfen Sie die Linkantwort, um zu wissen, welche.
Um meine eigene Frage zu beantworten: Nein, es gibt derzeit keine Möglichkeit, eine der C # 8.0-Funktionen in einer Razor-Ansicht zu verwenden. Die Laufzeitkompilierung scheint mit einem Paket namens durchgeführt zu
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
werden. Die einzige Möglichkeit wäre, dieses Paket zu aktualisieren, damit einige der neuen Funktionen verwendet werden können.Ich werde diese Antwort aktualisieren, sobald ich weitere Informationen erhalte.
quelle