Ich habe einen vorhandenen Website- Projekttyp Visual Studio 2015 aktualisiert und das Framework auf 4.6 geändert.
Ich habe dann erwartet, dass all diese neuen Funktionen in meinem Code hinter Dateien verfügbar sind.
Leider bekomme ich Fehler wie:
Fehler CS8026: Die Funktion 'Eigenschaft mit Ausdruckskörper' ist in C # 5 nicht verfügbar. Bitte verwenden Sie die Sprachversion 6 oder höher.
oder zB:
Fehler CS8026: Die Funktion 'Interpolierte Zeichenfolgen' ist in C # 5 nicht verfügbar. Bitte verwenden Sie die Sprachversion 6 oder höher.
Ich habe einen kurzen Google-Check durchgeführt und einen Typen gefunden, der einige Kommentare in einem Blog-Beitrag von ScottGu veröffentlicht hat (Suche nach "8026" auf der Seite).
Da ich seine Lösung nicht verstehe und die Lösung besser sichtbar machen möchte, habe ich dieses SO-Posting erstellt.
Meine Frage:
Wie kann ich ein Visual Studio 2015-Projekt vom Typ Website (dh keine Webanwendung ) verwenden, um C # 6-Funktionen zu erkennen?
quelle
Antworten:
Ich habe dies mit ASP.NET MVC 5 (getestet 5.2.3) getestet, und Ihr Kilometerstand kann mit anderen Webframeworks variieren, aber Sie müssen nur das Roslyn CodeDOM | hinzufügen NuGet- Paket
CodeDOM-Anbieter für .NET Compiler ...
https://www.nuget.org/packages/Microsoft.CodeDom.Providers.DotNetCompilerPlatform/
Das NuGet-Paket sollte die DLL-Dateien hinzufügen und Folgendes zu Ihrer web.config hinzufügen.
Wenn es noch fehlt. Versuchen Sie, sich selbst hinzuzufügen.
quelle
Microsoft.CodeDom.Providers.DotNetCompilerPlatform
und ihre Abhängigkeit installierenMicrosoft.Net.Compilers
Siehe auch diesen Blog-Beitrag von Sayed Ibrahim Hashimi, wie dies über die VS-IDE erfolgt.
Aktualisieren.
Bei VS 2017 und 2019 wurde diese Funktion auf Build -> ASP.NET Compilation verschoben .
quelle
Ich habe die DotNetCompilerPlatform wie von @jbtule vorgeschlagen installiert, bekam aber immer noch die gleichen Fehler.
Ich habe die Lösung geschlossen, die Ordner bin und obj gelöscht, dann die Lösung geöffnet und neu erstellt. Jetzt funktionieren die C # 6-Funktionen.
quelle
Install-Package ...
) funktioniert . Auch auf 4.6 abzielen.bin
undobj
.Mögliche Lösungen, entnommen aus den Kommentaren zu ScottGus Blogposting (Suche nach "8026" auf der Seite):
Lösungsvorschlag 1 (David Taylor)
Fügen Sie diese RTM-Code-Dom-Elemente zu web.config hinzu:
Fügen Sie dann die Dateien Roslyn und Microsoft.CodeDom.Providers. *. DLL in Ihr BIN-Verzeichnis ein.
Die Einrichtung ist einfach genug, aber mir war nur seltsam, dass die Standardvorlage nicht dafür eingerichtet wurde, wenn Sie beim Erstellen einer neuen "Website" in VS 2015 RTM .NET 4.6 ausgewählt haben.
Lösungsvorschlag 2 (Martin)
Nach dem obigen Kommentar von David Taylor sieht es so aus, als ob die Einstellungen für system.codedom korrekt sind, wenn eine Webanwendung mit TargetFramework als Standard v4.5.2 erstellt wird. Durch Ändern von TargetFramework in Version 4.6 werden die Compilereinstellungen für CSharp anscheinend so geändert, dass ein Problem auftritt.
Meine Problemumgehungen waren wie folgt:
Die Startseite sollte wie erwartet geladen werden.
Zur Information: Der Inhalt von system.codedom wird unmittelbar nach dem Ändern von TargetFramework in Version 4.6 angezeigt. war wie folgt (beachten Sie die Verwendung des Typs "Microsoft.CSharp.CSharpCodeProvider"):
quelle
Microsoft.CSharp.CSharpCodeProvider
bedeutet Version 4.0, dass Rosyln nicht verwendet wird. Daher funktioniert dies nicht für C # 6.0.<LangVersion>
diecsproj
Datei gleich ist6
. Es kann Probleme verursachen, wenn es etwas anderes ist.Dies ist nicht für ein Website-Projekt . So machen Sie es für ein ASP.NET MVC-Projekt.
Sie können C # 6 in der Visual Studio-Benutzeroberfläche umschalten. Dies ist eine so einfache Option, dass es sich lohnt, sie zuerst auszuprobieren.
quelle
<% Eval(whatever) %>
.So sieht es in VS2017 mit einem Website-Projekt aus:
quelle
Ich habe diesen Fehler erhalten, nachdem ich NULL Änderungen an meinem WebAPI-Projekt vorgenommen habe. Ich habe das DotNetCompilerPlatform-Nuget-Paket deinstalliert und neu installiert, wodurch das Problem behoben wurde.
quelle