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?


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.


1
Czy wiesz, czy istnieje równoważne ustawienie dla VB.NET?
— 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! :)


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.


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>

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.


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”

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.