Làm cách nào để tắt Hỗ trợ C # 6 trong Visual Studio 2015?


136

Lý lịch

Chúng tôi có một dự án đang phát triển trong VS 2015 với C # 6 được kích hoạt mà đôi khi cần phải được mở bởi các nhà phát triển sử dụng VS 2013 mà không có C # 6.

Chúng tôi không có ý định sử dụng C # 6 trong giải pháp cụ thể này (nhiều như tôi muốn).

Vấn đề

Visual Studio và ReSharper đề xuất các cấu trúc ngôn ngữ C # 6 hữu ích giúp giải pháp không thể hoạt động trong các phiên bản trước của Visual Studio mà không hỗ trợ C # 6.

Tôi đã tắt hỗ trợ ReSharper C # 6 nhưng dường như tôi không thể tắt / giới hạn các tính năng C # trên toàn bộ giải pháp.

Câu hỏi

Làm cách nào để giới hạn các khả năng của C # đến C # 5 trong một giải pháp hoặc trong Visual Studio 2015?


17
Xây dựng tab, nút Nâng cao, cài đặt phiên bản Ngôn ngữ.
Hans Passant

@HansPassant cảm ơn! Đây là chính xác nó. Tôi sẽ viết nó dưới dạng câu trả lời nhưng nếu bạn đăng câu trả lời ở đây, tôi chắc chắn sẽ đánh dấu câu trả lời của bạn là đúng.
SeanKilleen

Chính xác là vấn đề của tôi! ngoại trừ giải pháp của chúng tôi là vào năm 2013, nhưng tôi muốn tiếp tục sử dụng VS2015.
anish

@entre không nhất thiết phải có nhu cầu; bạn luôn có thể không sử dụng các tính năng C # 6. Visual studio và chia sẻ lại hữu ích đề nghị tái cấu trúc sử dụng các tính năng này, mặc dù. Miễn là máy dựng của bạn hỗ trợ C # 6, thì đó không phải là vấn đề.
SeanKilleen 10/07/2015

Tôi không muốn sử dụng c # 6 ... nhưng tôi vẫn nhận được những đề xuất đó .. tôi đã xóa chúng để chia sẻ lại .. nhưng yêu cầu phòng thu hình ảnh ... tôi đoán studio hình ảnh sẽ không cung cấp intellisense đề xuất c # 6 vì .net của tôi khung là 4,5
harishr

Câu trả lời:


136

Bạn có thể đặt riêng tính năng ngôn ngữ cho từng dự án bằng cách đi tới Properties => Build tab => Advanced button => Language Versionvà đặt phiên bản ưa thích của bạn.

Bạn nên nhận ra rằng nó vẫn sẽ sử dụng Nền tảng trình biên dịch "C # 6.0" mới (tên mã Roslyn). Tuy nhiên, trình biên dịch đó sẽ bắt chước hành vi của các trình biên dịch cũ hơn và sẽ giới hạn bạn với các tính năng chỉ có trên phiên bản ngôn ngữ cụ thể đó.


Tôi không nghĩ rằng có một thiết lập toàn giải pháp có sẵn.


1
Bạn có biết nếu có một cài đặt tương đương cho VB.NET không?
Bradley Uffner 16/07/2015

2
Tôi đã nhận được câu trả lời của tôi sớm hơn ngày hôm nay. stackoverflow.com/questions/31454902/
Bradley Uffner

1
Sau khi thay đổi thuộc tính Project, Studio của tôi chỉ đánh dấu mã C # 6.0 trong trình chỉnh sửa. Nhưng không coi đó là lỗi (xây dựng thành công).
Eugene Griaznov

2
Nếu bạn có nhiều dự án, tôi khuyên bạn nên chỉnh sửa trực tiếp csproj. Thêm phần sau vào bên trong PropertyGroupphần tử đầu tiên :<LangVersion>5</LangVersion>
mhand

Hoạt động chính xác theo cùng một cách để vô hiệu hóa hỗ trợ C # 7 trong VS2017 - chỉ cần sử dụng <LangVersion>6</LangVersion>thay thế.
Paul Suart

49

thêm vào bên dưới .sln.DotSettingsnên vô hiệu hóa nó ở cấp độ giải pháp

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

Hoặc nếu bạn không có .sln.DotSettingstệp:

  1. Nếu tệp giải pháp của bạn được gọi là Apple.sln, hãy tạo một tệp bên cạnh tệp có tên Apple.sln.DotSinstall.

  2. Cung cấp cho nó các nội dung sau:

    <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. Đóng và mở lại giải pháp, Resharper chỉ nên cảnh báo bạn về những điều C # 5.

  4. Đừng quên xóa phần này khi cuối cùng bạn bắt đầu sử dụng các tính năng của C # 6! :)


1
Điều này nên được đánh dấu là câu trả lời vì nó áp dụng cho tất cả các dự án trong một giải pháp và là một tệp có thể được kiểm tra.
twoleggedhorse

8
@twoleggedhorse thực sự câu trả lời này chỉ liên quan đến Resharper mà OP đã vô hiệu hóa, vì vậy nó thậm chí không trả lời câu hỏi.
i3arnon

1
Tôi cũng đồng ý rằng, điều này nên được đánh dấu là câu trả lời. OP đã hỏi về cài đặt rộng giải pháp, mà CHỈ câu trả lời này cung cấp.
sam-xor

1
Chà, dù sao đi nữa, điều này không ngăn Visual Studio hiển thị các đề xuất riêng của Microsoft về cải tiến mã (đó là câu hỏi thực tế để ngăn chặn những điều đó). Câu trả lời này không hoạt động cho ReSharper, không phải cho Visual Studio (Không phải tất cả chúng ta đều đang sử dụng ReSharper).
Stephen Reindl

11

Công cụ này tôi đã viết có thể giúp bạn nếu bạn có nhiều dự án mà bạn cần đặt LangVersion.


10

Bạn có thể đặt tính năng ngôn ngữ cho tất cả solutions/csprojvới MSBuildUserExtensionsPath.

Tìm kiếm giá trị của $(MSBuildUserExtensionsPath), nó sẽ giống nhưC:\Users\$(User)\AppData\Local\Microsoft\MSBuild

Sau đó chỉnh sửa tệp Force.LangVersion.ImportBefore.propstrong thư mục $(MSBuildUserExtensionsPath)\14.0\Imports\Microsoft.Common.Props\ImportBeforevới:

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

9

Các bước đã được viết ở trên, chỉ cần thêm một ảnh chụp màn hình của VS2015 của tôi:

Thuộc tính của dự án >> Build >> Advanced >> Phiên bản ngôn ngữ

nhập mô tả hình ảnh ở đây

Tôi đặt nó thành C # 5.0.


8

Nhấp chuột phải vào Project trong Project Explorer và chọn Properties.

Khi tab Thuộc tính mở, chọn Xây dựng và nhấp vào nút Nâng cao ở dưới cùng bên phải.

Có hộp thả xuống gọi là Phiên bản ngôn ngữ. Thay đổi lựa chọn thành "C # 5.0"

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.