Як відключити підтримку C # 6 у Visual Studio 2015?


136

Фон

У нас є проект, який ми розробляємо у VS 2015 із включеним C # 6, який періодично потребує відкриття розробниками, що використовують VS 2013 без C # 6.

Ми не маємо наміру використовувати C # 6 у цьому конкретному рішенні (скільки б я хотів).

Проблема

Visual Studio і ReSharper пропонують корисні конструкції на мові C # 6, які роблять рішення непридатним у попередніх версіях Visual Studio без підтримки C # 6.

Я відключив підтримку ReSharper C # 6, але я не можу відключити / обмежити функції C # у всьому рішенні.

Питання

Як обмежити можливості C # до C # 5 в рамках рішення або в рамках Visual Studio 2015?


17
Вкладка "Збірка", "Додаткова кнопка", "Налаштування версії мови".
Ганс Пасант

@HansPassant дякую! Це саме воно. Я напишу це у формі відповіді, але якщо ви опублікуєте відповідь тут, я обов'язково позначу вашу як правильну.
SeanKilleen

Саме моя проблема! окрім нашого рішення у 2013 році, але я хочу продовжувати використовувати VS2015.
аніш

@entre не обов'язково є потреба; ви завжди можете просто не використовувати функції C # 6. Візуальна студія та переробку корисно пропонують рефактори, які використовують ці функції. Поки ваша побудова машина підтримує C # 6, це не повинно бути проблемою.
SeanKilleen

Я не хочу використовувати c # 6 ... але я все ще отримую ці пропозиції .. я видалив їх для переосмислення .. але прошу візуальну студію ... я здогадуюсь, що візуальна студія не зможе надати інтеліссенс із пропозицією c # 6, тому що мій .net фреймворк - 4,5
harishr

Відповіді:


136

Ви можете встановити особливості мови для кожного проекту окремо, перейшовши Properties => Build tab => Advanced button => Language Versionта встановивши бажану версію.

Ви повинні усвідомити, що вона все ще буде використовувати нову платформу компіляторів .Net (NET Compiler) (кодова назва Roslyn). Однак цей компілятор буде імітувати поведінку старих компіляторів і обмежує вас функціями, доступними лише для цієї конкретної мовної версії.


Я не думаю, що доступні налаштування на широке рішення.


1
Чи знаєте ви, чи існує еквівалентний параметр для VB.NET?
Бредлі Уффнер

2
Свою відповідь я отримав раніше сьогодні. stackoverflow.com/questions/31454902 / ...
Бредлі Uffner

1
Після змін у властивостях проекту моя Studio просто відзначає код C # 6.0 у редакторі. Але це не трактує як помилку (будується успішно).
Євген Гріазнов

2
Якщо у вас багато проектів, рекомендую редагувати csproj безпосередньо. Додайте всередину першого PropertyGroupелемента:<LangVersion>5</LangVersion>
1616

Працює точно так само, як відключити підтримку C # 7 у VS2017 - просто використовувати <LangVersion>6</LangVersion>замість цього.
Пол Суарт

49

Додавання нижче в .sln.DotSettingsслід відключити його на рівні рішення

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

Або якщо у вас немає .sln.DotSettingsфайлу:

  1. Якщо ваш файл рішення називається Apple.sln, створіть біля нього файл під назвою Apple.sln.DotSettings.

  2. Надайте їй такий вміст:

    <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. Закрийте та знову відкрийте рішення, Resharper повинен лише попередити вас про C # 5.

  4. Не забудьте видалити це, коли з часом ви почнете використовувати функції C # 6! :)


1
Це має бути позначено як відповідь, оскільки воно стосується всіх проектів у рамках рішення, і файл можна перевірити.
twoleggedhorse

8
@twoleggedhorse насправді ця відповідь стосується лише Resharper, який ОП вже відключений, тому він навіть не відповідає на питання.
i3arnon

1
Я також згоден, що це слід позначити як відповідь. ОП запитала про налаштування для широкого рішення, які ТІЛЬКИ ця відповідь дає.
sam-xor

1
Ну, так чи інакше це не заважає Visual Studio показувати власні рекомендації Microsoft щодо вдосконалення коду (актуальним було питання їх запобігання). Ця відповідь працює для ReSharper, а не для Visual Studio (Не всі ми використовуємо ReSharper).
Стівен Рейндл


10

Ви можете встановити мовну функцію для всіх solutions/csprojіз MSBuildUserExtensionsPath.

Шукайте значення значень $(MSBuildUserExtensionsPath), воно повинно бути чимось на кшталтC:\Users\$(User)\AppData\Local\Microsoft\MSBuild

Потім відредагуйте файл Force.LangVersion.ImportBefore.propsу папці за $(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBeforeдопомогою:

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

9

Кроки вже були написані вище, просто додавши скріншот додатково до мого VS2015:

Властивості проекту >> Збірка >> Додаткові >> Мовна версія

введіть тут опис зображення

Я встановив це на C # 5.0.


8

Клацніть правою кнопкою миші на Project у Project Explorer та виберіть Properties (Властивості).

Коли відкриється вкладка "Властивості", виберіть "Збірка" та натисніть кнопку "Попередньо" внизу праворуч.

Є спадне вікно під назвою Мовна версія. Змініть вибір на "C # 5.0"

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.