web-dev-qa-db-de.com

Wie verwende ich C # 6 mit dem Projekttyp "Website"?

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?

110
Uwe Keim

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

CodeDOM-Anbieter für .NET Compiler ...

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=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>

Wenn es noch fehlt. Versuchen Sie, sich selbst hinzuzufügen.

109
jbtule

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.
enter image description here

47
Vertigo

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.

14
Jon Crowell

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:

<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=\&quot;Web\&quot; /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.

Lösungsvorschlag 2 (Martin)

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:

  1. Datei/Neu/ASP.NET-Webanwendung
  2. Wählen Sie unter ASP.NET 4.5.2-Vorlagen die Vorlage "Web-API" aus
  3. Erstellen Sie eine Kopie des system.codedom-Elements (und seines Inhalts) in web.config
  4. Legen Sie unter Properties/TargetFramework das Target Framework auf 4.6 fest
  5. Ersetzen Sie das geänderte system.codedom-Element in web.config durch die Kopie, die vor dem Ändern von TargetFramework erstellt wurde
  6. Schlagen F5

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=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
</system.codedom>
12
Uwe Keim

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.

  1. Klicken Sie mit der rechten Maustaste auf Ihr Projekt und wählen Sie Eigenschaften .
  2. Klicken Sie auf die Registerkarte Erstellen .
  3. Ganz unten auf der Registerkarte "Erstellen" befindet sich eine Schaltfläche Erweitert ... .
  4. Dies öffnet die erweiterten Build-Einstellungen wie unten gezeigt. Wählen Sie C # 6.0.

enter image description here

7
Jess

So sieht es in VS2017 mit einem Website-Projekt aus:

enter image description here

4
b_levitt

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.

2
ComeIn