Aktualisiert eine vorhandene Website Projekttyp Visual Studio 2015, änderte ich das Framework auf 4.6.
Ich habe dann erwartet, dass all diese neuen Funktionen in meinem Code hinter Dateien verfügbar sind.
Leider erhalte ich Fehler wie:
Fehler CS8026: Die Funktion "Ausdrucksstarke Eigenschaft" ist in C # 5 nicht verfügbar. Verwenden Sie die Sprachversion 6 oder höher.
oder z.B.
Fehler CS8026: Die Funktion 'Interpolierte Zeichenfolgen' ist in C # 5 nicht verfügbar. Verwenden Sie die Sprachversion 6 oder höher.
Ich habe einen kurzen Google-Check durchgeführt und ein Typ, der einige Kommentare veröffentlicht in einem Blog-Beitrag von ScottGu gefunden (suche auf der Seite nach "8026").
Da ich seine Lösung nicht verstehe und auch 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 (d. H. Nicht Webanwendung) zum Erkennen von C # 6-Features verwenden?
Ich habe dies mit ASP.NET MVC 5 (getestet 5.2.3) getestet, und Ihre Laufleistung kann mit anderen Web-Frameworks variieren, aber Sie müssen nur Roslyn CodeDOM | hinzufügen NuGet Paket
Ersatz-CodeDOM-Anbieter, die den neuen .NET Compiler Platform-Compiler ("Roslyn") als Service-APIs verwenden. Dies bietet Unterstützung für neue Sprachfunktionen in Systemen, die CodeDOM verwenden (z. B. ASP.NET-Laufzeitkompilierung) und verbessert die Kompilierungsleistung dieser Systeme.
PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
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.
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+" />
</compilers>
</system.codedom>
Wenn es noch fehlt. Versuchen Sie, sich selbst hinzuzufügen.
Siehe auch dieser Blog-Beitrag von Sayed Ibrahim Hashimi , wie dies über die VS IDE gemacht wird.
In Visual Studio 2015 Update 1 haben wir eine neue Funktion aufgenommen, um dies zu vereinfachen. Wenn Sie eine Lösung geöffnet haben, die mindestens ein Webprojekt für .NET 4.5+ und nicht das DotNetCompilerPlatform NuGet-Paket im Menü Projekt enthält, wird die neue Option C # 6 aktivieren/VB 14 erscheinen.
Ich habe die DotNetCompilerPlatform wie in @jbtule vorgeschlagen installiert, habe aber immer noch die gleichen Fehler erhalten.
PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
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.
Mögliche Lösungen, entnommen aus den Kommentaren zu ScottGus Blogposting (Suche nach "8026" auf der Seite):
Fügen Sie diese RTM code dom-Elemente zu web.config hinzu:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
Fügen Sie anschließend die DLL-Dateien Roslyn und Microsoft.CodeDom.Providers. *. In Ihr BIN-Verzeichnis ein.
Die Einrichtung ist einfach genug, aber für mich war es 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.
Nach dem obigen Kommentar von David Taylor sieht es so aus, als wären die system.codedom-Einstellungen korrekt, wenn eine Web-App mit dem TargetFramework als Standard v4.5.2 erstellt wird. Das Ändern des TargetFrameworks auf v4.6 scheint die Compilereinstellungen für CSharp auf eine Weise zu ändern, die ein Problem verursacht.
Meine Problemumgehungen lauteten wie folgt:
Die Homepage sollte wie erwartet geladen werden.
Zur Information, der Inhalt von system.codedom wird sofort nach der Änderung von TargetFramework auf v4.6 angezeigt. war wie folgt (Anmerkung Verwendung des Typs "Microsoft.CSharp.CSharpCodeProvider"):
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701">
<providerOption name="CompilerVersion" value="v4.0"/>
</compiler>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
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.
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.