Wie deaktiviere ich die C # 6-Unterstützung in Visual Studio 2015?


136

Hintergrund

Wir haben ein Projekt, das wir in VS 2015 mit aktiviertem C # 6 entwickeln und das gelegentlich von Entwicklern geöffnet werden muss, die VS 2013 ohne C # 6 verwenden.

Wir haben nicht die Absicht, C # 6 in dieser speziellen Lösung zu verwenden (so oft ich möchte).

Problem

Visual Studio und ReSharper schlagen hilfreiche C # 6-Sprachkonstrukte vor, die die Lösung in früheren Versionen von Visual Studio ohne C # 6-Unterstützung funktionsunfähig machen.

Ich habe die ReSharper C # 6-Unterstützung deaktiviert, kann jedoch die C # -Funktionen in der gesamten Lösung anscheinend nicht deaktivieren / einschränken.

Frage

Wie beschränke ich C # auf C # 5-Funktionen innerhalb einer Lösung oder in Visual Studio 2015?


17
Registerkarte "Erstellen", Schaltfläche "Erweitert", Einstellung der Sprachversion.
Hans Passant

@ HansPassant danke! Das ist genau das. Ich werde es in Antwortform aufschreiben, aber wenn Sie die Antwort hier posten, werde ich Ihre Antwort mit Sicherheit als die richtige markieren.
SeanKilleen

Genau mein Problem! außer unsere Lösung ist im Jahr 2013, aber ich möchte stattdessen weiterhin VS2015 verwenden.
Anish

@entre gibt es nicht unbedingt eine Notwendigkeit; Sie können die C # 6-Funktionen immer einfach nicht verwenden . Visual Studio und Resharper schlagen jedoch Refactorings vor, die diese Funktionen nutzen. Solange Ihre Build-Maschine C # 6 unterstützt, sollte dies kein Problem sein.
SeanKilleen

Ich möchte c # 6 nicht verwenden ... aber ich erhalte immer noch diese Vorschläge. Ich habe sie zum erneuten Schärfen entfernt. Aber ich frage nach Visual Studio. Ich denke, Visual Studio bietet keine Intellisense-Vorschläge für C # 6, weil mein .net Rahmen ist 4.5
Harishr

Antworten:


136

Sie können die Sprachfunktion für jedes Projekt separat Properties => Build tab => Advanced button => Language Versionfestlegen, indem Sie Ihre bevorzugte Version aufrufen und festlegen.

Sie sollten sich darüber im Klaren sein, dass weiterhin die neue "C # 6.0" .Net Compiler Platform (Codename Roslyn) verwendet wird. Dieser Compiler ahmt jedoch das Verhalten älterer Compiler nach und beschränkt Sie auf Funktionen, die nur für diese bestimmte Sprachversion verfügbar sind.


Ich glaube nicht, dass eine lösungsweite Einstellung verfügbar ist.


1
Wissen Sie, ob es eine entsprechende Einstellung für VB.NET gibt?
Bradley Uffner

2
Ich habe meine Antwort heute früher bekommen. stackoverflow.com/questions/31454902/…
Bradley Uffner

1
Nach Änderungen in den Projekteigenschaften markiert mein Studio im Editor nur C # 6.0-Code. Behandelt es aber nicht als Fehler (wird erfolgreich erstellt).
Eugene Griaznov

2
Wenn Sie viele Projekte haben, empfehle ich, das csproj direkt zu bearbeiten. Fügen Sie Folgendes in das erste PropertyGroupElement ein:<LangVersion>5</LangVersion>
mhand

Funktioniert genauso, um die C # 7-Unterstützung in VS2017 zu deaktivieren - verwenden Sie <LangVersion>6</LangVersion>stattdessen einfach .
Paul Suart

49

Hinzufügen unten in .sln.DotSettingssollte es auf Lösungsebene deaktivieren

<s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String>

Oder wenn Sie keine .sln.DotSettingsDatei haben:

  1. Wenn Ihre Lösungsdatei Apple.sln heißt, erstellen Sie daneben eine Datei mit dem Namen Apple.sln.DotSettings.

  2. Geben Sie ihm den folgenden Inhalt:

    <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation">
        <s:String x:Key="/Default/CodeInspection/CSharpLanguageProject/LanguageLevel/@EntryValue">CSharp50</s:String>
    </wpf:ResourceDictionary>
  3. Schließen Sie die Lösung und öffnen Sie sie erneut. Resharper sollte Sie nur vor C # 5-Dingen warnen.

  4. Vergessen Sie nicht, dies zu entfernen, wenn Sie irgendwann C # 6-Funktionen verwenden! :) :)


1
Dies sollte als Antwort markiert werden, da es für alle Projekte innerhalb einer Lösung gilt und eine Datei eingecheckt werden kann.
twoleggedhorse

8
@twoleggedhorse Eigentlich ist diese Antwort nur für Resharper relevant, dessen OP bereits deaktiviert ist, sodass die Frage nicht einmal beantwortet wird.
i3arnon

1
Ich stimme auch zu, dass dies als Antwort markiert werden sollte. OP hat nach lösungsweiten Einstellungen gefragt, die NUR diese Antwort bietet.
Sam-Xor

1
Auf jeden Fall hindert dies Visual Studio nicht daran, Microsofts eigene Empfehlungen für Codeverbesserungen anzuzeigen (es war die eigentliche Frage, diese zu verhindern). Diese Antwort funktioniert für ReSharper, nicht für Visual Studio (nicht alle von uns verwenden ReSharper).
Stephen Reindl

11

Dieses Tool, das ich geschrieben habe, kann Ihnen helfen, wenn Sie viele Projekte haben, für die Sie festlegen müssen LangVersion.


10

Sie können die Sprachfunktion für alle solutions/csprojmit einstellen MSBuildUserExtensionsPath.

Suchen Sie den Wert von $(MSBuildUserExtensionsPath), es sollte so etwas wie seinC:\Users\$(User)\AppData\Local\Microsoft\MSBuild

Bearbeiten Sie dann die Datei Force.LangVersion.ImportBefore.propsim Ordner $(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBeforemit:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <LangVersion>5</LangVersion>
  </PropertyGroup>
</Project>

9

Die obigen Schritte wurden bereits geschrieben, indem nur ein weiterer Screenshot meines VS2015 hinzugefügt wurde:

Eigenschaften des Projekts >> Erstellen >> Erweitert >> Sprachversion

Geben Sie hier die Bildbeschreibung ein

Ich habe das auf C # 5.0 gesetzt.


8

Klicken Sie im Projektexplorer mit der rechten Maustaste auf Projekt und wählen Sie Eigenschaften.

Wenn die Registerkarte Eigenschaften geöffnet wird, wählen Sie Erstellen und klicken Sie unten rechts auf die Schaltfläche Erweitert.

Es gibt ein Dropdown-Feld namens Sprachversion. Ändern Sie die Auswahl auf "C # 5.0".

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.