Как отключить поддержку 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?

SeanKilleen
источник
17
Вкладка «Сборка», кнопка «Дополнительно», настройка языковой версии.
Ганс Пассант
@ HansPassant спасибо! Это именно так. Я напишу это в форме ответа, но если вы опубликуете ответ здесь, я обязательно отмечу ваш как правильный.
ШонКиллин
Именно моя проблема! кроме нашего решения в 2013 году, но я хочу продолжать использовать VS2015 вместо этого.
Аниш
@entre нет необходимости; Вы всегда можете просто не использовать функции C # 6. Тем не менее, Visual Studio и Resharper могут помочь в рефакторинге, использующем эти функции. Пока ваша сборочная машина поддерживает C # 6, это не должно быть проблемой.
SeanKilleen
Я не хочу использовать c # 6 ... но я все еще получаю эти предложения .. я удалил их для резарпера ... но спрашиваю для visual studio ... я предполагаю, что visual studio не предоставит intellisense, предлагая c # 6, потому что мой .net рамки 4.5
harishr

Ответы:

136

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

Вы должны понимать, что он по-прежнему будет использовать новую платформу компилятора .Net C # 6.0 (под кодовым названием Roslyn). Однако этот компилятор будет имитировать поведение старых компиляторов и будет ограничивать вас функциями, доступными только для этой конкретной языковой версии.


Я не думаю, что есть настройка для всего решения.

i3arnon
источник
1
Знаете ли вы, есть ли эквивалентные настройки для VB.NET?
Брэдли Аффнер
2
Я получил свой ответ сегодня сегодня. stackoverflow.com/questions/31454902/…
Брэдли Аффнер
1
После изменений в свойствах проекта моя студия просто помечает код C # 6.0 в редакторе. Но не рассматривает это как ошибку (строит успешно).
Евгений Грязнов
2
Если у вас много проектов, я рекомендую редактировать csproj напрямую. Добавьте следующее внутри первого PropertyGroupэлемента:<LangVersion>5</LangVersion>
mhand
Работает точно так же, как отключить поддержку 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! :)

harishr
источник
1
Это должно быть помечено как ответ, так как оно относится ко всем проектам в решении и может быть зарегистрирован файл.
twoleggedhorse
8
@twoleggedhorse на самом деле этот ответ имеет отношение только к Resharper, OP которого уже отключен, поэтому он даже не отвечает на вопрос.
i3arnon
1
Я также согласен, что это должно быть отмечено как ответ. ОП спросил о широких настройках решения, которые предоставляет ТОЛЬКО этот ответ.
Сам-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>
fhusson
источник
9

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

Свойства проекта >> Build >> Advanced >> Языковая версия

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

Я установил это на C # 5.0.

Raghav
источник
8

Щелкните правой кнопкой мыши Project в Project Explorer и выберите Properties.

Когда откроется вкладка Properties, выберите Build и нажмите кнопку Advance в правом нижнем углу.

Существует выпадающий список под названием Language Version. Измените выбор на "C # 5.0"

Nicknow
источник