ฉันจะปิดใช้งานการสนับสนุน C # 6 ใน Visual Studio 2015 ได้อย่างไร


136

พื้นหลัง

เรามีโครงการที่เรากำลังพัฒนาในปี 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
แท็บสร้างปุ่มขั้นสูงการตั้งค่าเวอร์ชันภาษา
Hans Passant

@HansPassant ขอบคุณ! ตรงนี้แหละครับ ฉันจะเขียนมันในแบบฟอร์มคำตอบ แต่ถ้าคุณโพสต์คำตอบที่นี่ฉันจะแน่ใจว่าได้ทำเครื่องหมายของคุณว่าถูกต้อง
SeanKilleen

ปัญหาของฉันแน่นอน! ยกเว้นโซลูชันของเราคือในปี 2013 แต่ฉันต้องการใช้ VS2015 ต่อไปแทน
anish

@ มีความจำเป็นไม่จำเป็นต้อง; คุณไม่สามารถใช้คุณสมบัติ C # 6 ได้ตลอดเวลา แม้ว่า Visual Studio และ resharper จะช่วยแนะนำการรีแฟคเตอร์ที่ใช้คุณสมบัติเหล่านี้ ตราบใดที่เครื่องสร้างของคุณรองรับ C # 6 มันก็ไม่น่าจะมีปัญหา
SeanKilleen

ฉันไม่ต้องการที่จะใช้ c # 6 ... แต่ฉันยังคงได้รับคำแนะนำเหล่านั้น .. ฉันลบพวกเขาสำหรับ resharper .. แต่ขอสตูดิโอภาพ ... ฉันเดาสตูดิโอภาพจะไม่ให้ Intellisense แนะนำ c # 6 เพราะ. net ของฉัน กรอบคือ 4.5
harishr

คำตอบ:


136

คุณสามารถตั้งค่าคุณสมบัติภาษาสำหรับแต่ละโครงการแยกกันได้โดยไปที่Properties => Build tab => Advanced button => Language Versionและตั้งค่าเวอร์ชันที่คุณต้องการ

คุณควรตระหนักว่ามันจะยังคงใช้ "C # 6.0". Net Compiler Platform ใหม่ (ชื่อรหัส Roslyn) อย่างไรก็ตามคอมไพเลอร์นั้นจะเลียนแบบพฤติกรรมของคอมไพเลอร์รุ่นเก่าและจะ จำกัด ให้คุณใช้ฟีเจอร์ที่มีเฉพาะในเวอร์ชันภาษานั้น ๆ เท่านั้น


ฉันไม่คิดว่าจะมีการตั้งค่าโซลูชันแบบกว้าง


1
คุณรู้หรือไม่ว่ามีการตั้งค่าที่เทียบเท่ากับ VB.NET หรือไม่
แบรดลีย์ Uffner

2
ฉันได้รับคำตอบก่อนหน้านี้วันนี้ stackoverflow.com/questions/31454902/…
Bradley Uffner

1
หลังจากการเปลี่ยนแปลงคุณสมบัติของโครงการ Studio ของฉันเพียงแค่ทำเครื่องหมายรหัส C # 6.0 ในโปรแกรมแก้ไข แต่ไม่ถือว่าเป็นข้อผิดพลาด (สร้างสำเร็จ)
Eugene Griaznov

2
หากคุณมีหลายโครงการฉันแนะนำให้แก้ไข csproj โดยตรง เพิ่มองค์ประกอบต่อไปนี้ในPropertyGroupองค์ประกอบแรก:<LangVersion>5</LangVersion>
จับมือ

ทำงานในลักษณะเดียวกับการปิดใช้งานการสนับสนุน C # 7 ใน VS2017 เพียงใช้<LangVersion>6</LangVersion>แทน
Paul Suart

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 ซึ่ง OP ปิดใช้งานอยู่แล้วดังนั้นจึงไม่ได้ตอบคำถาม
i3arnon

1
ฉันยังเห็นด้วยว่าควรทำเครื่องหมายเป็นคำตอบ OP ได้ถามเกี่ยวกับการตั้งค่าโซลูชันแบบกว้างซึ่งคำตอบนี้มีให้เท่านั้น
sam-xor

1
อย่างไรก็ตามวิธีนี้ไม่ได้ป้องกัน Visual Studio เพื่อแสดงคำแนะนำของ Microsoft สำหรับการปรับปรุงรหัส (เป็นคำถามที่เกิดขึ้นจริงเพื่อป้องกันสิ่งเหล่านั้น) คำตอบนี้ใช้ได้สำหรับ ReSharper ไม่ใช่สำหรับ Visual Studio (ไม่ใช่เราทุกคนที่ใช้ ReSharper)
Stephen Reindl


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 Explorer และเลือกคุณสมบัติ

เมื่อแท็บ Properties เปิดขึ้นเลือก Build แล้วคลิกปุ่ม Advance ที่ด้านล่างขวา

มีกล่องแบบหล่นลงที่เรียกว่ารุ่นภาษา เปลี่ยนการเลือกเป็น "C # 5.0"

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.