Jak wyłączyć obsługę języka C # 6 w programie Visual Studio 2015?

136

tło

Mamy projekt, który rozwijamy w VS 2015 z włączonym C # 6, który czasami musi być otwierany przez programistów używających VS 2013 bez C # 6.

Nie mamy zamiaru używać C # 6 w tym konkretnym rozwiązaniu (tak bardzo, jak bym chciał).

Problem

Visual Studio i ReSharper sugerują pomocne konstrukcje języka C # 6, które powodują, że rozwiązanie nie działa we wcześniejszych wersjach programu Visual Studio bez obsługi języka C # 6.

Mam wyłączył ReSharper C # 6 wsparcia , ale nie może wydawać się aby wyłączyć limitu / C # wyposażony w całym roztworze.

Pytanie

Jak ograniczyć możliwości języka C # do języka C # 5 w ramach rozwiązania lub w programie Visual Studio 2015?

SeanKilleen
źródło
17
Karta Kompilacja, przycisk Zaawansowane, ustawienie wersji językowej.
Hans Passant
@HansPassant thanks! To jest dokładnie to. Napiszę to w formularzu odpowiedzi, ale jeśli prześlesz odpowiedź tutaj, na pewno oznaczysz twoją jako właściwą.
SeanKilleen
Dokładnie mój problem! z wyjątkiem tego, że nasze rozwiązanie jest w 2013 roku, ale zamiast tego chcę nadal używać VS2015.
anish
@entre niekoniecznie jest taka potrzeba; zawsze możesz po prostu nie używać funkcji C # 6. Visual Studio i Resharper sugerują jednak refaktoryzacje, które wykorzystują te funkcje. Dopóki maszyna kompilacji obsługuje język C # 6, nie powinno to stanowić problemu.
SeanKilleen,
Nie chcę używać języka C # 6… ale nadal otrzymuję te sugestie… Usunąłem je dla resharper… ale proszę o Visual Studio… Myślę, że Visual Studio nie zapewni IntelliSense sugerując C # 6, ponieważ moja .net framework to 4,5
harishr

Odpowiedzi:

136

Możesz ustawić język dla każdego projektu osobno, przechodząc do Properties => Build tab => Advanced button => Language Versioni ustawiając preferowaną wersję.

Należy zdać sobie sprawę, że nadal będzie używać nowej platformy kompilatora .Net „C # 6.0” (o nazwie kodowej Roslyn). Jednak ten kompilator będzie imitował zachowanie starszych kompilatorów i ograniczy Cię do funkcji dostępnych tylko w tej konkretnej wersji językowej.


Nie sądzę, aby dostępne było ustawienie obejmujące całe rozwiązanie.

i3arnon
źródło
1
Czy wiesz, czy istnieje równoważne ustawienie dla VB.NET?
Bradley Uffner,
2
Dziś dostałem odpowiedź. stackoverflow.com/questions/31454902/…
Bradley Uffner,
1
Po zmianach we właściwościach projektu moje Studio po prostu zaznacza kod C # 6.0 w edytorze. Ale nie traktuje tego jako błędu (kompiluje się pomyślnie).
Eugene Griaznov
2
Jeśli masz wiele projektów, polecam bezpośrednią edycję csproj. Wewnątrz pierwszego PropertyGroupelementu dodaj następujące elementy:<LangVersion>5</LangVersion>
mhand
Działa dokładnie w ten sam sposób, aby wyłączyć obsługę języka C # 7 w VS2017 - po prostu użyj <LangVersion>6</LangVersion>zamiast tego.
Paul Suart
49

dodaj poniżej w .sln.DotSettingspowinno wyłączyć to na poziomie rozwiązania

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

Lub jeśli nie masz .sln.DotSettingspliku:

  1. Jeśli plik rozwiązania nosi nazwę Apple.sln, utwórz obok niego plik o nazwie Apple.sln.DotSettings.

  2. Nadaj mu następującą zawartość:

    <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. Zamknij i ponownie otwórz rozwiązanie, Resharper powinien tylko ostrzec Cię o rzeczach C # 5.

  4. Nie zapomnij usunąć tego, gdy w końcu zaczniesz używać funkcji C # 6! :)

harishr
źródło
1
Należy to zaznaczyć jako odpowiedź, ponieważ dotyczy wszystkich projektów w ramach rozwiązania i jest to plik, który można
zaewidencjonować
8
@twoleggedhorse faktycznie ta odpowiedź dotyczy tylko Resharpera, którego OP jest już wyłączony, więc nawet nie odpowiada na pytanie.
i3arnon
1
Zgadzam się również, że należy to zaznaczyć jako odpowiedź. OP zapytał o ustawienia dla całego rozwiązania, które podaje TYLKO ta odpowiedź.
sam-xor
1
Cóż, w każdym razie nie przeszkadza to programowi Visual Studio w wyświetlaniu własnych zaleceń Microsoft dotyczących ulepszeń kodu (chodziło o to, aby temu zapobiec). Ta odpowiedź działa dla ReSharper, a nie dla Visual Studio (nie wszyscy używamy ReSharper).
Stephen Reindl
11

To narzędzie, które napisałem, może ci pomóc, jeśli masz wiele projektów, na które musisz przygotować LangVersion.

khellang
źródło
10

Możesz ustawić funkcję języka dla wszystkich za solutions/csprojpomocą MSBuildUserExtensionsPath.

Wyszukaj wartość $(MSBuildUserExtensionsPath), powinno być coś w styluC:\Users\$(User)\AppData\Local\Microsoft\MSBuild

Następnie edytuj plik Force.LangVersion.ImportBefore.propsw folderze za $(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBeforepomocą:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <LangVersion>5</LangVersion>
  </PropertyGroup>
</Project>
fhusson
źródło
9

Kroki zostały już napisane powyżej, po prostu dodając zrzut ekranu dalej mojego VS2015:

Właściwości projektu >> Build >> Advanced >> Wersja językowa

wprowadź opis obrazu tutaj

Ustawiłem to na C # 5.0.

Raghav
źródło
8

Kliknij prawym przyciskiem myszy Projekt w Eksploratorze projektów i wybierz Właściwości.

Po otwarciu karty Właściwości wybierz opcję Kompiluj i kliknij przycisk Zaawansowane w prawym dolnym rogu.

Znajduje się tam rozwijana lista o nazwie Wersja językowa. Zmień zaznaczenie na „C # 5.0”

Nicknow
źródło