ฉันใช้ C # เวอร์ชันไหน


191

ฉันต้องการทราบว่าฉันใช้ C # รุ่นใด ถ้าฉันจะใช้หลามฉันจะทำสิ่งที่ชอบpython -Vจากบรรทัดคำสั่งหรือพิมพ์:

import sys
print sys.version

ใน PHP ฉันจะทำสิ่งนี้: phpinfo();ใน java:java -version

แต่ฉันไม่สามารถหาวิธีที่จะบรรลุผลใน C #

คำถามนี้ไม่ได้ตอบแม้ว่าชื่อจะแนะนำว่าควร

ฉันได้ว่ามันขึ้นอยู่กับ. NET Framework แต่มีวิธีการเขียนโปรแกรมของกรอบการทำงานของฉัน? ฉันหมายถึงโดยไม่ต้องไปที่ไดเรกทอรีและตรวจสอบชื่อของโฟลเดอร์. NET ของฉัน


5
นี่คือคำถามยอดนิยมของ John Skeet
Avi Turner

5
ใน Visual Studio: คุณสมบัติโครงการ> สร้าง> ขั้นสูง ... > ภาษาเวอร์ชัน: codeproject.com/Tips/865579//
Slai

คำตอบ:


66

หากต้องการรับเวอร์ชันของเฟรมเวิร์ก - ดูเวอร์ชันของหนึ่งในแอสเซมบลีหลักเช่น

 Console.Write(typeof(string).Assembly.ImageRuntimeVersion);

การรับเวอร์ชั่นของคอมไพเลอร์ C # นั้นค่อนข้างยาก แต่คุณควรคาดเดาเวอร์ชันได้ด้วยการตรวจสอบว่าใช้เฟรมเวิร์กเวอร์ชันใด

หากคุณกำลังใช้คอมไพเลอร์บรรทัดคำสั่ง (csc.exe) คุณสามารถตรวจสอบวิธีใช้เพื่อดูเวอร์ชัน (เช่นเดียวกับที่คุณต้องรู้เวอร์ชันของ Framework ต่อไป:

C:\Windows\Microsoft.NET\Framework\v4.0.30319>csc /?
Microsoft (R) Visual C# 2010 Compiler version 4.0.30319.1

22
น่าเสียดาย Assembly.ImageRuntimeVersion ไม่ได้บอกหมายเลขรุ่นที่ถูกต้อง - บนพีซีของฉันติดตั้ง. NET 4.6 RCแล้ว แต่ Assembly.ImageRuntimeVersion รายงานv4.0.30319
แมตต์

1
นอกจากว่าคุณใช้ C # 6 ซึ่งไม่ได้ดูที่. NET version
Michael Puckett II

2
RE: ความคิดเห็นของ Matt: เพียงแค่คุณติดตั้ง. NET เวอร์ชั่นหนึ่งไว้ในพีซีของคุณเท่านั้นไม่ได้หมายความว่าเป็นเวอร์ชั่นที่ใช้ในโครงการของคุณ
LoJo

@LoJo - คุณพูดถูก เหตุผลหนึ่งคือ Visual Studio อนุญาตให้มีการกำหนดเป้าหมายหลายจุด (เช่นคุณสามารถเลือก. NET Framework Framework ในคุณสมบัติของโครงการ) อีกเหตุผลคือต้องเพิ่ม Roslyn รุ่นใหม่ผ่าน NUGET ในโครงการของคุณ ข้อที่สามอย่างที่ฉันเขียนไว้ที่นี่ csc.exe ถูก จำกัด ให้เป็นรุ่น 5.0 และไม่สามารถใช้ตรวจจับ C # รุ่นที่สูงกว่าได้
Matt

3
ยังไม่มีใครบอกว่าคำสั่งที่ถูกต้องในการรับรายชื่อรุ่นที่รองรับโดยคอมไพเลอร์ Roslyn ของคุณคือ "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ csc.exe Visual Visual / langversion :?
David A. Gray

235

มันขึ้นอยู่กับสิ่ง.NET Frameworkที่คุณใช้ ตรวจสอบคำตอบของ Jon Skeetเกี่ยวกับรุ่นต่างๆ

นี่เป็นคำตอบสั้น ๆ ของเขา

C # 1.0เปิดตัวพร้อมกับ. NET 1.0

C # 1.2 (แปลกมากพอ); เผยแพร่กับ. NET 1.1

C # 2.0เปิดตัวพร้อมด้วย. NET 2.0

C # 3.0เปิดตัวพร้อมด้วย. NET 3.5

C # 4.0 วางจำหน่ายพร้อมกับ. NET 4

C # 5.0เปิดตัวพร้อมด้วย. NET 4.5

C # 6.0พร้อมกับ. NET 4.6

C # 7.0เปิดตัวพร้อมด้วย. NET 4.6.2

C # 7.3เปิดตัวพร้อมด้วย. NET 4.7.2

C # 8.0ออกมาพร้อมกับNET Core 3.0


4
แค่หัวขึ้น; C # 6 ใช้คอมไพเลอร์อื่น (Roslyn) และจะคอมไพล์ซอร์สโค้ดให้กับ. NET รุ่นอื่น ๆ ไม่ใช่แค่เพียง 4.6 4.6
Michael Puckett II

12
แต่คุณสามารถคอมไพล์. NET 2.0 ได้ด้วยคอมไพเลอร์ C # 7.0 การตรวจสอบเวอร์ชั่น. NET เป็นการลดจำนวนที่ จำกัด มากและให้คำตอบที่เป็นไปได้เท่านั้น
อาเบล

5
ให้ฉันเพิ่มความคิดเห็นของ @ Abel ว่าลิงก์นี้จะแสดงให้คุณเห็นว่าคุณสามารถเปลี่ยนเวอร์ชันภาษา C # (เกือบ) ได้อย่างอิสระจากเฟรมเวิร์ก ดังนั้นคุณสามารถหักจากข้อผิดพลาดทางไวยากรณ์ที่คุณได้รับว่าโค้ดจะเป็นเวอร์ชั่น C # ที่ใหม่กว่าที่คุณเลือกไว้ในคุณสมบัติ
Matt

87

แม้ว่าสิ่งนี้จะไม่ตอบคำถามของคุณโดยตรง แต่ฉันวางไว้ตรงนี้เนื่องจาก google นำหน้านี้ขึ้นเป็นครั้งแรกในการค้นหาของฉันเมื่อฉันกำลังมองหาข้อมูลนี้

หากคุณใช้Visual Studioคุณสามารถคลิกขวาที่โปรเจ็กต์ของคุณ -> คุณสมบัติ -> บิลด์ -> ขั้นสูง ซึ่งควรแสดงรายการเวอร์ชันที่มีอยู่รวมถึงโปรเจ็กต์ที่คุณใช้

ป้อนคำอธิบายรูปภาพที่นี่


7
ฉันจะมีเวอร์ชันใดหากฉันเห็นAutomatically selected based on framework versionและไม่สามารถเลือกสิ่งใดจากรายการแบบหล่นลง (ปิดใช้งาน) ฉันใช้ VS 2019
hellouworld

@hellouworld คลิกที่ทำไมฉันไม่สามารถเลือกไฮเปอร์ลิงก์ C # เวอร์ชั่นอื่นและหน้าเว็บจะให้ข้อมูลอ้างอิงแก่คุณ ... จากนั้นกลับไปที่แท็บแอปพลิเคชันและดูว่าคุณเลือกกรอบงานเป้าหมายแบบใด
Johnny Wu

8

รุ่น. NET ผ่านรีจิสทรี

การติดตั้ง Framework \ NDP \ HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework เด็ก ๆ และดูในแต่ละรุ่น ส่วนที่มีรหัส 'เต็ม' เป็นเวอร์ชันในระบบ

https://support.microsoft.com/en-us/kb/318785 https://msdn.microsoft.com/en-us/library/hh925568(v=vsv10.1).aspx

. NET version ผ่าน Visual Studio

ช่วยเหลือ -> เกี่ยวกับ Microsoft Visual Studio -> เวอร์ชั่น. NET ถูกระบุไว้ที่มุมขวาบน

อย่างที่ฉันเข้าใจในเวลานี้ Visual Studio ใช้. NET Framework จากระบบปฏิบัติการ

เป้าหมาย. NET Framework เวอร์ชันของโครงการใน Visual Studio สามารถแก้ไขได้ด้วยคุณสมบัติโครงการ -> แอปพลิเคชัน -> กรอบงานเป้าหมาย

ผ่าน dll

ถ้าคุณรู้ไดเรกทอรี. NET Framework เช่น C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

เปิด System.dll คลิกขวา -> Properties -> แท็บ Details

รุ่น C #

วิธีใช้ -> เกี่ยวกับ Microsoft Visual Studio

ในรายการผลิตภัณฑ์ที่ติดตั้งมี Visual C # ในกรณีของฉัน Visual C # 2015

Visual Studio (Microsoft) จัดส่ง C # ตามชื่อ Visual C #

https://msdn.microsoft.com/en-us/library/hh156499.aspx

C # 6, Visual Studio .NET 2015 รุ่นปัจจุบันดูด้านล่าง


7

เวอร์ชั่น C # ที่คุณใช้งานทั้งหมดขึ้นอยู่กับรุ่น. Net ที่คุณใช้งาน

ถ้าคุณใช้ visual studio เพื่อการพัฒนาคุณจะต้องเลือก. NET Framework เวอร์ชั่นที่เกี่ยวข้องกับ c #

เหล่านี้เป็นรุ่นของ C # ที่รู้จักกัน:

  • C # 1.0เปิดตัวพร้อมกับ. NET 1.0และ VS2002 (มกราคม 2545)
  • C # 1.2 (แปลกมากพอ); เผยแพร่ด้วย. NET 1.1 และ VS2003 (เมษายน 2003) รุ่นแรกที่เรียกDisposeในIEnumerators IDisposableซึ่งการดำเนินการ คุณสมบัติเล็ก ๆ น้อย ๆ
  • C # 2.0เปิดตัวพร้อมด้วย. NET 2.0และ VS2005 (พฤศจิกายน 2548) คุณสมบัติใหม่ที่สำคัญ: generics วิธีการไม่ระบุชื่อประเภท nullable บล็อกตัววนซ้ำ
  • C # 3.0เปิดตัวพร้อมด้วย. NET 3.5และ VS2008 (เดือนพฤศจิกายน 2550) คุณสมบัติใหม่ที่สำคัญ: การแสดงออกแลมบ์ดา, วิธีการขยาย, ต้นไม้แสดงออก, ประเภทที่ไม่ระบุชื่อ, การพิมพ์โดยนัย ( var), การแสดงออกแบบสอบถาม
  • C # 4.0 วางจำหน่ายพร้อมด้วย. NET 4และ VS2010 (เมษายน 2010) คุณสมบัติใหม่ที่สำคัญ: การเชื่อมโยงล่าช้า ( dynamic), การมอบหมายและความแปรปรวนทั่วไปของอินเทอร์เฟซ, การสนับสนุน COM เพิ่มเติม, การตั้งชื่ออาร์กิวเมนต์และพารามิเตอร์ทางเลือก
  • C # 5.0เปิดตัวพร้อมด้วย. NET 4.5ในเดือนสิงหาคม 2012

คำตอบ C # เวอร์ชันของ Refrence Jon Skeet


คุณสามารถใช้คุณสมบัติบางอย่างจาก C # 3.0 ใน. NET 2.0 ดังนั้นมันจึงไม่ใช่การทำแผนที่ 1-1
nefarel

13
นี่เป็นความผิด - มันไม่ได้ขึ้นอยู่กับเวอร์ชั่น. NET มันขึ้นอยู่กับคอมไพเลอร์
markmnl

มันผิดธรรมดา โครงการปัจจุบันของฉันถูกตั้งค่าเป็น. NET 4.0 แต่ถึงกระนั้นฉันก็ยังสามารถใช้คุณสมบัติ C # 7.0 ได้ แต่เมื่อฉันผลักดันจากระยะไกลระบบ CI / CD ก็ล้มเหลวในการสร้างเพราะใช้ C # เวอร์ชัน 5 หรือ 6
8256

สิ่งนี้ไม่เป็นจริงตั้งแต่ C # 6.0
asaf92

6

โดยค่าเริ่มต้นต่อไปนี้เป็นคอมไพเลอร์ C # รุ่นที่สอดคล้องกันสำหรับ Visual Studio:

  1. Visual Studio 2015: C # 6.0
  2. Visual Studio 2013: C # 5.0
  3. Visual Studio 2012: C # 5.0
  4. Visual Studio 2010: C # 4.0
  5. Visual Studio 2008: C # 3.0
  6. Visual Studio 2005: C # 2.0
  7. Visual Studio.NET 2003: C # 1.2
  8. Visual Studio.NET 2002: C # 1.0

คุณยังสามารถแก้ไขเวอร์ชันได้โปรดทำตามขั้นตอนด้านล่าง

เปิดหน้าต่างคุณสมบัติโครงการ:

step 1. Right click on the Project Name
step 2. Select "Properties" (last option in menu)
step 3. Select "Build" from left hand side options and scroll till down
step 4. click on "Advance" button.
step 5. It will open a popup and there you will get "Language Version" dropdown
step 6. Select desired version of C# and Click "OK"

5

จากประเภทพรอมต์คำสั่งของนักพัฒนา

csc -langversion:?

ที่จะแสดงรุ่น C # ทั้งหมดที่รองรับรวมถึงค่าเริ่มต้น:

1
2
3
4
5
6
7.0 (default)
7.1
7.2
7.3 (latest)

5

ขอบคุณ @fortesl และคำตอบนี้

ฉันใช้ VS 2019 และมันไม่ได้บอกคุณได้อย่างง่ายดายว่า C # เวอร์ชันที่คุณใช้อยู่ ฉันทำงานกับ. Net Core 3.0 และ VS 2019 โดยใช้ C # 8 ในสภาพแวดล้อมนั้น แต่ "csc -langversion:?" ทำให้ชัดเจน:

D:\>csc -langversion:?
Supported language versions:
default
1
2
3
4
5
6
7.0
7.1
7.2
7.3
8.0 (default)
latestmajor
preview
latest

ไม่แน่ใจว่า csc -version ระบุว่า:

D:\>csc --version
Microsoft (R) Visual C# Compiler version 3.4.0-beta1-19462-14 (2f21c63b)
Copyright (C) Microsoft Corporation. All rights reserved.

ดูเหมือนว่า OP ต้องการคำตอบที่เกี่ยวข้องกับการเขียนรหัส
#:

4

หากคุณใช้ VS2015 ให้ทำตามขั้นตอนด้านล่างเพื่อหาข้อมูลเดียวกัน:

  1. คลิกขวาที่โครงการ
  2. คลิกที่แท็บคุณสมบัติ
  3. จากหน้าต่างคุณสมบัติเลือกตัวเลือกสร้าง
  4. ในการคลิกที่ปุ่มล่วงหน้า
  5. คุณจะพบเวอร์ชั่นภาษา

ภาพด้านล่างแสดงขั้นตอนสำหรับสิ่งเดียวกัน:

ขั้นตอนที่ 1:

ขั้นตอนที่ 1

ขั้นตอนที่ 2:

ขั้นตอนที่ 2


3

เพื่อดูเวอร์ชั่นคอมไพเลอร์ที่ติดตั้งของ VC #:

เปิดพรอมต์คำสั่ง Visual Studio และเพียงพิมพ์ csc แล้วกด Enter

คุณจะเห็นสิ่งต่อไปนี้:

Microsoft (R) Visual C # Compiler เวอร์ชัน 4.0.30319.34209

สำหรับ Microsoft (R) .NET Framework 4.5

ลิขสิทธิ์ (C) Microsoft Corporation สงวนลิขสิทธิ์.

PS: " CSC " หมายถึง " C Sharp Compiler " จริง ๆ แล้วใช้คำสั่งนี้คุณเรียกใช้ csc.exe ซึ่งเป็นแฟ้มที่ปฏิบัติการได้ซึ่งอยู่ใน "c: \ Windows \ Microsoft.NET \ Framework \ vX.X.XXX" สำหรับข้อมูลเพิ่มเติมเกี่ยวกับ CSC โปรดไปที่http://www.file.net/process/csc.exe.html


3

สำหรับ Windows คุณเรียกใช้ dev ที่บรรทัดคำสั่ง / ค้นหาและเลือก Developer Command Prompt สำหรับ VS ถ้าอย่างนั้นคุณจะต้องวิ่ง

csc

ตอนนี้คุณได้รับข้อมูลที่คล้ายกับ

Microsoft (R) Visual C# Compiler version 2.6.0.62329 (5429b35d)
Copyright (C) Microsoft Corporation. All rights reserved.   

สำหรับ Windows และถ้าคุณเริ่มต้นด้วย terminal cmd

cd C:\Windows\Microsoft.NET\Framework\
dir

ตอนนี้คุณเห็นไดเรกทอรีและไฟล์ทั้งหมดใน. NET \ Framework \ Please เลือก v ... ล่าสุดแล้วไปที่นั่นเช่น

cd v4.0.30319

วิ่ง

csc

คุณจะเห็นข้อมูลเกี่ยวกับคอมไพเลอร์รุ่น C # ซึ่งอาจเป็นอะไรที่คล้ายกัน

Microsoft (R) Visual C# Compiler version 4.7.2556.0
for C# 5
Copyright (C) Microsoft Corporation. All rights reserved.

2

เวอร์ชันภาษาจะถูกเลือกตามกรอบงานเป้าหมายของโครงการเป็นค่าเริ่มต้น

แต่ละโครงการอาจใช้. NET Framework เวอร์ชันอื่นคอมไพเลอร์ C # ที่เหมาะสมที่สุดจะถูกเลือกโดยค่าเริ่มต้นโดยดูที่เฟรมเวิร์กเป้าหมาย จาก visual studio UI จะไม่อนุญาตให้ผู้ใช้เปลี่ยนรุ่นภาษาอย่างไรก็ตามเราสามารถเปลี่ยนเวอร์ชันภาษาได้โดยแก้ไขไฟล์โครงการด้วยการเพิ่มกลุ่มคุณสมบัติใหม่ แต่นี่อาจทำให้เกิดปัญหาการคอมไพล์ / รันในรหัสที่มีอยู่

<PropertyGroup>  
<LangVersion>8.0</LangVersion>  
</PropertyGroup>

ฉันเห็นสิ่งต่อไปนี้จากเอกสารของ Microsoft

คอมไพเลอร์จะกำหนดค่าเริ่มต้นตามกฎเหล่านี้:

Target framework  version     C# language version default
.NET Core           3.x         C# 8.0
.NET Core           2.x         C# 7.3
.NET Standard       2.1         C# 8.0
.NET Standard       2.0         C# 7.3
.NET Standard       1.x         C# 7.3
.NET Framework      all         C# 7.3

0

นี่คือภาพรวมว่า. NET Framework และคอมไพเลอร์เวอร์ชันเกี่ยวข้องอย่างไรตั้งค่าและปรับเปลี่ยน แต่ละโครงการมีเวอร์ชัน. NET Framework เป้าหมายตัวอย่างเช่นเวอร์ชัน 3.x หรือ 2.x .NET Framework ประกอบด้วยชนิดเวลาทำงานและส่วนประกอบ

การติดตั้งเวอร์ชัน Visual Studio และ. NET Framework เวอร์ชั่นจะกำหนดตัวเลือกภาษาคอมไพเลอร์และคอมไพเลอร์ที่สามารถใช้งานร่วมกันได้ รุ่น c # เริ่มต้นและตัวเลือกที่ใช้ในโครงการ Visual Studio เป็นรุ่นภาษาล่าสุดที่ติดตั้งที่เข้ากันได้กับ. NET Framework รุ่นที่ใช้

ในการดูหรืออัพเดต Framework หรือภาษา C # ภายในโครงการภายใน Visual Studio 2011:

  • คลิกขวาที่โครงการภายใน Solution Explorer แล้วเลือกคุณสมบัติ
  • เลือก 'แอปพลิเคชัน' ในบานหน้าต่างนำทางด้านซ้าย ภายใต้ Target framework: เป็น. NET Framework version เลือกลูกศรลงเพื่อดูเวอร์ชันเฟรมเวิร์กที่มีอยู่ทั้งหมด

  • เลือก 'สร้าง' ในบานหน้าต่างนำทางด้านซ้าย ในส่วน 'ทั่วไป' ของบานหน้าต่างถัดจาก 'รุ่นภาษา:' คือรุ่นภาษาคอมไพเลอร์ c # ที่ใช้เช่น 'default' หรือ c # 5.0

  • เลือกลูกศรลงในรายการแบบเลื่อนลง 'รุ่นภาษา: "เพื่อดูรุ่นภาษาทั้งหมดที่มีอยู่หาก' ค่าเริ่มต้น 'เป็นรุ่น c # ที่ใช้งานอยู่เวอร์ชั่นภาษา c # ที่ใช้งานร่วมกันได้จะถูกนำมาใช้

หากต้องการดูรุ่นภาษาคอมไพเลอร์ที่ถูกต้องสำหรับ 'ค่าเริ่มต้น' ให้ป้อนคำสั่งต่อไปนี้ในคำสั่งผู้พัฒนาสำหรับรุ่น Visual Studio ที่คุณติดตั้ง ตัวอย่างเช่นจากไอคอนเลือกไอคอนเริ่มของ Windows: "Developer Command Prompt สำหรับ VS2011 'และป้อน:

csc -langversion: ค่าเริ่มต้น

Microsoft (R) Visual C # Compiler เวอร์ชั่น 4.7.3062.0 สำหรับ c # 5


0

ในการรับรหัส C # จากรหัสให้ใช้รหัสนี้จากเอกสาร Microsoftเพื่อรับรุ่น. NET Framework จากนั้นจับคู่กับตารางที่ทุกคนกล่าวถึง คุณสามารถโค้ดอัพ Framework Framework รุ่น C # ในพจนานุกรมหรือบางสิ่งบางอย่างเพื่อให้ฟังก์ชันของคุณคืนค่าเวอร์ชัน C # ทำงานได้ถ้าคุณมี. NET Framework> = 4.5

using System;
using Microsoft.Win32;

public class GetDotNetVersion
{
   public static void Main()
   {
      Get45PlusFromRegistry();
   }

   private static void Get45PlusFromRegistry()
   {
      const string subkey = @"SOFTWARE\Microsoft\NET Framework Setup\NDP\v4\Full\";

      using (var ndpKey = RegistryKey.OpenBaseKey(RegistryHive.LocalMachine, RegistryView.Registry32).OpenSubKey(subkey))
      {
        if (ndpKey != null && ndpKey.GetValue("Release") != null) {
            Console.WriteLine($".NET Framework Version: {CheckFor45PlusVersion((int) ndpKey.GetValue("Release"))}");
        }
         else {
            Console.WriteLine(".NET Framework Version 4.5 or later is not detected.");
         } 
      }

      // Checking the version using >= enables forward compatibility.
      string CheckFor45PlusVersion(int releaseKey)
      {
         if (releaseKey >= 528040)
            return "4.8 or later";
         if (releaseKey >= 461808)
            return "4.7.2";
         if (releaseKey >= 461308)
            return "4.7.1";
         if (releaseKey >= 460798)
            return "4.7";
         if (releaseKey >= 394802)
            return "4.6.2";
         if (releaseKey >= 394254)
            return "4.6.1";      
         if (releaseKey >= 393295)
            return "4.6";      
         if (releaseKey >= 379893)
            return "4.5.2";      
         if (releaseKey >= 378675)
            return "4.5.1";      
         if (releaseKey >= 378389)
            return "4.5";      
         // This code should never execute. A non-null release key should mean
         // that 4.5 or later is installed.
         return "No 4.5 or later version detected";
      }
   }
}   
// This example displays output like the following:
//       .NET Framework Version: 4.6.1
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.