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.