Come disabilitare il supporto C # 6 in Visual Studio 2015?


136

sfondo

Abbiamo un progetto che stiamo sviluppando in VS 2015 con C # 6 abilitato che a volte deve essere aperto dagli sviluppatori che usano VS 2013 senza C # 6.

Non abbiamo intenzione di usare C # 6 all'interno di questa particolare soluzione (per quanto mi piacerebbe).

Problema

Visual Studio e ReSharper suggeriscono utili costrutti del linguaggio C # 6 che rendono inutilizzabile la soluzione nelle versioni precedenti di Visual Studio senza supporto C # 6.

Ho disabilitato il supporto ReSharper C # 6 ma non riesco a disabilitare / limitare le funzionalità di C # nell'intera soluzione.

Domanda

Come posso limitare le funzionalità da C # a C # 5 all'interno di una soluzione o in Visual Studio 2015?


17
Scheda Genera, pulsante Avanzate, impostazione versione lingua.
— Hans Passant,

@HansPassant grazie! Questo è esattamente. Lo scriverò nel modulo di risposta ma se pubblichi la risposta qui, sarò sicuro di contrassegnare il tuo come quello corretto.
— SeanKilleen,

Esattamente il mio problema! tranne per il fatto che la nostra soluzione è nel 2013, ma voglio continuare a utilizzare VS2015.
— anish

@entre non c'è necessariamente bisogno; puoi sempre semplicemente non usare le funzionalità di C # 6. Visual Studio e Resharper suggeriscono comunque utili refactoring che utilizzano queste funzionalità. Finché la tua macchina di compilazione supporta C # 6, non dovrebbe essere un problema.
— SeanKilleen,

Non voglio usare c # 6 ... ma sto ancora ricevendo quei suggerimenti .. li ho rimossi per il resharper .. ma chiedendo visual studio ... immagino che Visual Studio non fornirà intellisense suggerendo c # 6 perché il mio .net framework is 4.5
— harishr

Risposte:


136

Puoi impostare la funzione della lingua per ciascun progetto separatamente andando su Properties => Build tab => Advanced button => Language Versione impostando la tua versione preferita.

Dovresti capire che utilizzerà ancora la nuova piattaforma di compilatore .Net "C # 6.0" (nome in codice Roslyn). Tuttavia, quel compilatore imiterà il comportamento dei compilatori più vecchi e ti limiterà a funzionalità disponibili solo in quella specifica lingua.


Non credo che sia disponibile un'impostazione a livello di soluzione.


1
Sai se esiste un'impostazione equivalente per VB.NET?
— Bradley Uffner,

2
Oggi ho ricevuto la mia risposta. stackoverflow.com/questions/31454902/...
— Bradley Uffner

1
Dopo le modifiche alle proprietà del progetto, il mio Studio contrassegna semplicemente il codice C # 6.0 nell'editor. Ma non lo considera un errore (compilato correttamente).
— Eugene Griaznov,

2
Se hai molti progetti, ti consiglio di modificare direttamente csproj. Aggiungi quanto segue all'interno del primo PropertyGroupelemento:<LangVersion>5</LangVersion>
— mhand

Funziona esattamente allo stesso modo per disabilitare il supporto per C # 7 in VS2017 - semplicemente usa <LangVersion>6</LangVersion>invece.
— Paul Suart,

49

aggiungere sotto in .sln.DotSettingsdovrebbe disabilitarlo a livello di soluzione

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

O se non hai un .sln.DotSettingsfile:

  1. Se il file della soluzione si chiama Apple.sln, creare un file accanto ad esso chiamato Apple.sln.DotSettings.

  2. Dagli i seguenti contenuti:

    <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. Chiudi e riapri la soluzione, Resharper ti avviserà solo di cose C # 5.

  4. Non dimenticare di rimuoverlo quando inizi a utilizzare le funzionalità di C # 6! :)


1
Questo dovrebbe essere contrassegnato come la risposta in quanto si applica a tutti i progetti all'interno di una soluzione ed è possibile archiviare un file.
— twoleggedhorse

8
@twoleggedhorse in realtà questa risposta è rilevante solo per Resharper quale OP già disabilitato, quindi non risponde nemmeno alla domanda.
— i3arnon,

1
Sono anche d'accordo che questo dovrebbe essere contrassegnato come risposta. OP ha chiesto delle impostazioni a livello di soluzione, che SOLO questa risposta fornisce.
— sam-xor,

1
Bene, comunque questo non impedisce a Visual Studio di mostrare i consigli di Microsoft per i miglioramenti del codice (era la vera domanda per prevenirli). Questa risposta funziona per ReSharper, non per Visual Studio (non tutti noi stiamo usando ReSharper).
— Stephen Reindl,


10

È possibile impostare la funzione della lingua per tutti solutions/csprojcon MSBuildUserExtensionsPath.

Cerca il valore di $(MSBuildUserExtensionsPath), dovrebbe essere qualcosa di simileC:\Users\$(User)\AppData\Local\Microsoft\MSBuild

Quindi modifica il file Force.LangVersion.ImportBefore.propsnella cartella $(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBeforecon:

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

9

I passaggi sono già stati scritti sopra, aggiungendo solo uno screenshot ulteriore del mio VS2015:

Proprietà del progetto >> Costruzione >> Avanzate >> Versione linguistica

inserisci qui la descrizione dell'immagine

L'ho impostato su C # 5.0.


8

Fare clic con il tasto destro su Progetto in Esplora progetti e selezionare Proprietà.

Quando si apre la scheda Proprietà, seleziona Crea e fai clic sul pulsante Avanzate in basso a destra.

C'è una casella a discesa chiamata Versione lingua. Cambia la selezione in "C # 5.0"

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.