Comment désactiver la prise en charge C # 6 dans Visual Studio 2015?

136

Contexte

Nous avons un projet que nous développons dans VS 2015 avec C # 6 activé qui doit parfois être ouvert par les développeurs utilisant VS 2013 sans C # 6.

Nous n'avons pas l'intention d'utiliser C # 6 dans cette solution particulière (autant que je le souhaiterais).

Problème

Visual Studio et ReSharper suggèrent des constructions de langage C # 6 utiles qui rendent la solution inopérante dans les versions antérieures de Visual Studio sans prise en charge de C # 6.

J'ai désactivé la prise en charge de ReSharper C # 6 mais je n'arrive pas à désactiver / limiter les fonctionnalités C # dans l'ensemble de la solution.

Question

Comment limiter les fonctionnalités C # à C # 5 dans une solution ou dans Visual Studio 2015?

SeanKilleen
la source
17
Onglet Construire, bouton Avancé, paramètre de version de langue.
Hans Passant
@HansPassant merci! C'est exactement ça. Je vais l'écrire sous forme de réponse, mais si vous postez la réponse ici, je ne manquerai pas de marquer la vôtre comme la bonne.
SeanKilleen
Exactement mon problème! sauf que notre solution est en 2013, mais je souhaite continuer à utiliser VS2015 à la place.
anish
@entre il n'y a pas nécessairement un besoin; vous pouvez toujours ne pas utiliser les fonctionnalités C # 6. Cependant, Visual Studio et Resharper suggèrent utilement des refactorisations qui utilisent ces fonctionnalités. Tant que votre machine de construction prend en charge C # 6, cela ne devrait pas être un problème.
SeanKilleen
Je ne veux pas utiliser c # 6 ... mais je reçois toujours ces suggestions .. je les ai supprimées pour le resharper .. mais en demandant un studio visuel ... je suppose que le studio visuel ne fournira pas d'intellisense suggérant c # 6 parce que mon .net framework is 4.5
harishr

Réponses:

136

Vous pouvez définir la fonctionnalité de langue pour chaque projet séparément en accédant à Properties => Build tab => Advanced button => Language Versionet en définissant votre version préférée.

Vous devez savoir qu'il utilisera toujours la nouvelle plate-forme de compilateur .Net "C # 6.0" (nom de code Roslyn). Cependant, ce compilateur imitera le comportement des anciens compilateurs et vous limitera aux fonctionnalités disponibles uniquement sur cette version de langage spécifique.


Je ne pense pas qu'il existe un paramètre à l'échelle de la solution disponible.

i3arnon
la source
1
Savez-vous s'il existe un paramètre équivalent pour VB.NET?
Bradley Uffner
2
J'ai eu ma réponse plus tôt aujourd'hui. stackoverflow.com/questions/31454902/…
Bradley Uffner
1
Après les modifications des propriétés du projet, mon Studio marque simplement le code C # 6.0 dans l'éditeur. Mais ne le traite pas comme une erreur (se construit avec succès).
Eugene Griaznov
2
Si vous avez de nombreux projets, je vous recommande de modifier directement le csproj. Ajoutez ce qui suit à l'intérieur du premier PropertyGroupélément:<LangVersion>5</LangVersion>
mhand
Fonctionne exactement de la même manière pour désactiver la prise en charge de C # 7 dans VS2017 - utilisez simplement à la <LangVersion>6</LangVersion>place.
Paul Suart
49

ajouter ci-dessous .sln.DotSettingsdevrait le désactiver au niveau de la solution

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

Ou si vous n'avez pas de .sln.DotSettingsfichier:

  1. Si votre fichier de solution s'appelle Apple.sln, créez un fichier à côté appelé Apple.sln.DotSettings.

  2. Donnez-lui le contenu suivant:

    <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. Fermez et rouvrez la solution, Resharper ne devrait vous avertir que des choses C # 5.

  4. N'oubliez pas de le supprimer lorsque vous commencez à utiliser les fonctionnalités C # 6! :)

harishr
la source
1
Cela devrait être marqué comme la réponse car elle s'applique à tous les projets dans une solution et est un fichier peut être
archivé
8
@twoleggedhorse en fait cette réponse n'est pertinente que pour Resharper qui OP déjà désactivé, donc il ne répond même pas à la question.
i3arnon
1
Je conviens également que cela devrait être marqué comme réponse. OP a posé des questions sur les paramètres à l'échelle de la solution, que SEULEMENT cette réponse fournit.
sam-xor
1
Eh bien, de toute façon, cela n'empêche pas Visual Studio d'afficher les propres recommandations de Microsoft pour les améliorations du code (c'était la question réelle de les empêcher). Cette réponse fonctionne pour ReSharper, pas pour Visual Studio (nous n'utilisons pas tous ReSharper).
Stephen Reindl
11

Cet outil que j'ai écrit pourrait vous aider si vous avez de nombreux projets à définir LangVersion.

Khellang
la source
10

Vous pouvez définir la fonction de langue pour tous les solutions/csprojavec MSBuildUserExtensionsPath.

Recherchez la valeur du $(MSBuildUserExtensionsPath), cela devrait être quelque chose commeC:\Users\$(User)\AppData\Local\Microsoft\MSBuild

Puis éditez le fichier Force.LangVersion.ImportBefore.propsdans le dossier $(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBeforeavec:

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

Des étapes ont déjà été écrites ci-dessus, en ajoutant simplement une capture d'écran de mon VS2015:

Propriétés du projet >> Construire >> Avancé >> Version linguistique

entrez la description de l'image ici

J'ai mis cela à C # 5.0.

Raghav
la source
8

Cliquez avec le bouton droit sur Projet dans l'Explorateur de projets et sélectionnez Propriétés.

Lorsque l'onglet Propriétés s'ouvre, sélectionnez Construire et cliquez sur le bouton Avancer en bas à droite.

Il existe une liste déroulante appelée Version de la langue. Changez la sélection en "C # 5.0"

Nicknow
la source