Tôi đang sử dụng phiên bản C # nào


191

Tôi muốn tìm hiểu phiên bản C # nào tôi đang sử dụng. Nếu tôi đang sử dụng python, tôi sẽ làm một cái gì đó như python -Vtừ dòng lệnh hoặc gõ:

import sys
print sys.version

Trong PHP tôi sẽ làm một cái gì đó như thế này: phpinfo();trong java:java -version

Nhưng tôi không thể tìm ra cách đạt được điều này trong C #.

Câu hỏi này không trả lời nó, mặc dù tên cho thấy rằng nó nên.

Tôi đã nhận ra rằng nó phụ thuộc vào .NET framework, nhưng có cách nào để tìm ra khuôn khổ của tôi không? Ý tôi là không đi đến thư mục và kiểm tra tên của các thư mục .NET của tôi.


5
Đây là câu hỏi được xếp hạng hàng đầu của John Skeet
Avi Turner

5
trong Visual Studio: Thuộc tính dự án> Xây dựng> Nâng cao ...> Phiên bản ngôn ngữ: codeproject.com/Tips/865579/ đá
Slai

Câu trả lời:


65

Để có phiên bản của khung - hãy xem phiên bản của một trong các Hội đồng chính

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

Bắt phiên bản trình biên dịch C # có phần khó hơn, nhưng bạn sẽ có thể đoán phiên bản bằng cách kiểm tra phiên bản khung nào được sử dụng.

Nếu bạn đang sử dụng trình biên dịch dòng lệnh (csc.exe), bạn có thể kiểm tra trợ giúp để xem phiên bản (dù sao bạn cũng cần biết phiên bản Framework:

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

22
Thật không may Assembly.ImageRuntimeVersion không cho bạn biết số phiên bản đúng - trên máy tính của tôi, .NET 4.6 RC được cài đặt nhưng Assembly.ImageRuntimeVersion báo cáo v4.0.30319
Matt

1
Trừ khi bạn đang sử dụng C # 6 mà không nhìn vào phiên bản .NET.
Michael Puckett II

2
RE: Nhận xét của Matt: Chỉ vì bạn đã cài đặt một phiên bản .NET trên PC, điều đó không có nghĩa đó là phiên bản được sử dụng trong dự án của bạn
LoJo

@LoJo - Bạn hoàn toàn đúng. Một lý do là Visual Studio cho phép đa mục tiêu (nghĩa là bạn có thể chọn phiên bản .NET Target Framework trong thuộc tính dự án), lý do khác là các phiên bản Roslyn mới hơn cần được thêm qua NUGET vào dự án của bạn. Thứ ba, như tôi đã viết ở đây , csc.exe bị giới hạn ở phiên bản 5.0 và không thể được sử dụng để phát hiện các phiên bản cao hơn của C #.
Matt

3
Chưa có ai đề cập rằng hướng dẫn chính xác để nhận danh sách các phiên bản được trình biên dịch Roslyn của bạn hỗ trợ là "C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ csc.exe" / langversion:?
David A. Gray

231

Nó phụ thuộc vào việc .NET Frameworkbạn sử dụng. Kiểm tra câu trả lời của Jon Skeet về các phiên bản.

Đây là phiên bản ngắn của câu trả lời của mình.

C # 1.0 được phát hành với .NET 1.0

C # 1.2 (đủ kỳ lạ); phát hành với .NET 1.1

C # 2.0 được phát hành với .NET 2.0

C # 3.0 được phát hành với .NET 3.5

C # 4.0 được phát hành với .NET 4

C # 5.0 được phát hành với .NET 4.5

C # 6.0 được phát hành với .NET 4.6

C # 7.0 được phát hành với .NET 4.6.2

C # 7.3 được phát hành với .NET 4.7.2

C # 8.0 được phát hành với NET Core 3.0


13
... và C # 6.0 được phát hành với .NET 4.6
Matt

4
Chỉ cần một cái đầu lên; C # 6 sử dụng một trình biên dịch khác (Roslyn) và sẽ biên dịch mã nguồn sang các phiên bản .NET khác không chỉ .NET 4.6.
Michael Puckett II

6
... và C # 7.0 được phát hành với .NET 4.6.2
Jivan

12
Nhưng bạn có thể biên dịch .NET 2.0 với trình biên dịch C # 7.0. Kiểm tra phiên bản .NET là một suy luận rất hạn chế và chỉ đưa ra một câu trả lời có thể xảy ra.
Abel

5
Hãy để tôi thêm vào nhận xét của @ Abel rằng liên kết này cho bạn thấy cách bạn có thể thay đổi phiên bản ngôn ngữ C # (gần như) độc lập khỏi khung. Vì vậy, bạn chỉ có thể khấu trừ từ các lỗi cú pháp mà bạn nhận được rằng mã giả định phiên bản C # mới hơn so với bạn có thể đã chọn trong các thuộc tính.
Matt

87

Mặc dù điều này không trả lời trực tiếp câu hỏi của bạn, nhưng tôi đặt vấn đề này ở đây khi google đưa trang này lên đầu tiên trong các tìm kiếm của tôi khi tôi đang tìm kiếm thông tin này.

Nếu bạn đang sử dụng Visual Studio , bạn có thể nhấn chuột phải vào dự án của bạn -> Properties -> Build -> Advanced này nên liệt kê các phiên bản có sẵn cũng như một proj của bạn đang sử dụng.

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


6
Tôi có phiên bản nào nếu thả xuống tôi thấy Automatically selected based on framework versionvà không thể chọn bất cứ thứ gì từ danh sách thả xuống (nó bị vô hiệu hóa)? Tôi đang sử dụng VS 2019.
hellouworld

@hellouworld Nhấp vào Tại sao tôi không thể chọn một siêu liên kết phiên bản C # khác và trang web sẽ cung cấp cho bạn tài liệu tham khảo ... sau đó quay lại tab Ứng dụng và xem Khung mục tiêu bạn đã chọn.
Johnny Wu

8

Phiên bản .NET thông qua registry

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \ khám phá trẻ em và xem xét từng phiên bản. Phiên bản có khóa 'Đầy đủ' là phiên bản trên hệ thống.

https://support.microsoft.com/en-us/kb/318785 https://msdn.microsoft.com/en-us/l Library / hh925568 (v = vs.110) .aspx

Phiên bản .NET thông qua Visual Studio

Trợ giúp -> Giới thiệu về Microsoft Visual Studio -> Phiên bản .NET được chỉ định ở trên cùng bên phải.

Theo tôi hiểu tại thời điểm này, Visual studio sử dụng .NET Framework từ HĐH.

Phiên bản .NET Framework đích của một dự án trong Visual Studio có thể được sửa đổi bằng Project Properties -> Application -> Target Framework

Thông qua dll

Nếu bạn biết thư mục .NET Framework, ví dụ: C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

Mở System.dll, nhấp chuột phải -> thuộc tính -> tab Chi tiết

Phiên bản C #

Trợ giúp -> Giới thiệu về Microsoft Visual Studio

Trong danh sách các sản phẩm được cài đặt có Visual C #. Trong trường hợp của tôi Visual C # 2015

Visual Studio (Microsoft) vận chuyển C # theo tên Visual C #.

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

C # 6, Visual Studio .NET 2015 Phiên bản hiện tại, xem bên dưới


7

Phiên bản C # bạn đang sử dụng hoàn toàn phụ thuộc vào phiên bản .Net bạn đang sử dụng.

nếu bạn đang sử dụng visual studio để phát triển, bạn có thể chọn phiên bản khung .net, phiên bản c # được liên kết với nó đi kèm

Đây là những phiên bản của C # được biết đến:

  • C # 1.0 được phát hành với .NET 1.0 và VS2002 (tháng 1 năm 2002)
  • C # 1.2 (đủ kỳ lạ); phát hành với .NET 1.1 và VS2003 (tháng 4 năm 2003). Phiên bản đầu tiên để gọi Disposevề IEnumerators mà thực hiện IDisposable. Một vài tính năng nhỏ khác.
  • C # 2.0 được phát hành với .NET 2.0 và VS2005 (tháng 11 năm 2005). Các tính năng mới chính: generic, phương thức ẩn danh, loại nullable, khối lặp
  • C # 3.0 được phát hành với .NET 3.5 và VS2008 (tháng 11 năm 2007). Các tính năng mới chính: biểu thức lambda, phương thức mở rộng, cây biểu thức, kiểu ẩn danh, gõ ngầm ( var), biểu thức truy vấn
  • C # 4.0 được phát hành với .NET 4 và VS2010 (tháng 4 năm 2010). Các tính năng mới chính: liên kết muộn ( dynamic), phương sai chung của đại biểu và giao diện, hỗ trợ COM nhiều hơn, các đối số được đặt tên và các tham số tùy chọn
  • C # 5.0 được phát hành với .NET 4.5 vào tháng 8 năm 2012.

Phiên bản C # của Jonence Jon Skeet Trả lời


Bạn có thể sử dụng một số tính năng từ C # 3.0 trong .NET 2.0 để nó không thực sự ánh xạ 1-1.
nefarel

13
Điều này là sai - nó không phụ thuộc vào phiên bản .NET, nó phụ thuộc vào trình biên dịch.
markmnl

Điều này hoàn toàn sai. Dự án hiện tại của tôi được đặt thành .NET 4.0 và tôi vẫn có thể sử dụng các tính năng C # 7.0. Nhưng một khi tôi đẩy đến điều khiển từ xa thì hệ thống CI / CD không thể xây dựng được vì nó sử dụng phiên bản C # 5 hoặc 6
phuclv

Điều này không đúng vì C # 6.0
asaf92

6

Theo mặc định sau đây là phiên bản tương ứng của trình biên dịch C # cho 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

Bạn cũng có thể sửa đổi phiên bản xin vui lòng làm theo các bước dưới đây.

Mở cửa sổ thuộc tính dự án:

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

Từ loại dấu nhắc lệnh của nhà phát triển

csc -langversion:?

Điều đó sẽ hiển thị tất cả các phiên bản C # được hỗ trợ bao gồm mặc định:

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

4

Nếu bạn đang sử dụng VS2015 thì hãy làm theo các bước dưới đây để tìm hiểu tương tự:

  1. Nhấp chuột phải vào dự án.
  2. Nhấp vào tab Thuộc tính .
  3. Từ cửa sổ thuộc tính chọn tùy chọn Build .
  4. Trong đó nhấp vào nút Advance .
  5. Ở đó bạn sẽ tìm ra phiên bản ngôn ngữ.

Dưới đây hình ảnh hiển thị các bước cho cùng:

Bước 1:

Bước 1

Bước 2:

Bước 2


4

Cảm ơn @fortesl và câu trả lời này

Tôi đang sử dụng VS 2019 và nó không dễ dàng cho bạn biết phiên bản C # bạn đang sử dụng. Tôi đang làm việc với .Net Core 3.0 và VS 2019 bằng C # 8 trong môi trường đó. Nhưng "csc -langversion:?" làm rõ điều này:

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

Không chắc chắn những gì csc -version đang xác định:

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

Có vẻ như OP cần một câu trả lời liên quan đến mã hóa
bradbury9

3

Để xem phiên bản trình biên dịch đã cài đặt của VC #:

Mở dấu nhắc lệnh của Visual Studio và chỉ cần gõ csc sau đó nhấn Enter.

Bạn sẽ thấy một cái gì đó như sau:

Microsoft (R) Visual C # Trình biên dịch phiên bản 4.0.30319.34209

cho Microsoft (R) .NET Framework 4.5

Bản quyền (C) Tập đoàn Microsoft. Đã đăng ký Bản quyền.

PS: " CSC " là viết tắt của " C Sharp Compiler ". Trên thực tế, sử dụng lệnh này, bạn chạy csc.exe, đây là một tệp thực thi được đặt trong "c: \ Windows \ Microsoft.NET \ Framework \ vX.X.XXX". Để biết thêm thông tin về CSC, hãy truy cập http://www.file.net/ process / csc.exe.html


3

Đối với Windows, bạn chạy dev tại dòng chương trình lệnh / tìm kiếm và chọn Dấu nhắc lệnh dành cho nhà phát triển cho VS. Sau đó, bạn sẽ chạy

csc

Bây giờ bạn có được thông tin tương tự như

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

Dành cho Windows và nếu bạn bắt đầu với thiết bị đầu cuối cmd

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

Bây giờ bạn thấy tất cả các thư mục và tệp trong .NET \ Framework \ Vui lòng chọn v ... mới nhất và đến đó, ví dụ:

cd v4.0.30319

Chạy

csc

Bạn sẽ thấy thông tin về phiên bản trình biên dịch C #, có thể tương tự như

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

1

Phiên bản ngôn ngữ được chọn dựa trên khung mục tiêu của dự án theo mặc định.

Mỗi dự án có thể sử dụng một phiên bản khác nhau của khung .Net, trình biên dịch C # phù hợp nhất sẽ được chọn theo mặc định bằng cách xem xét khung công tác đích. Từ phòng thu trực quan, UI sẽ không cho phép người dùng thay đổi phiên bản ngôn ngữ, tuy nhiên, chúng tôi có thể thay đổi phiên bản ngôn ngữ bằng cách chỉnh sửa tệp dự án có thêm nhóm thuộc tính mới. Nhưng điều này có thể gây ra vấn đề biên dịch / thời gian chạy trong mã hiện có.

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

Tôi có thể thấy những điều sau đây từ tài liệu của Microsoft.

Trình biên dịch xác định mặc định dựa trên các quy tắc sau:

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

Dưới đây là tổng quan về cách các phiên bản .NET framework và trình biên dịch có liên quan, được thiết lập và sửa đổi. Mỗi dự án có (các) phiên bản khung .NET đích, ví dụ phiên bản 3.x hoặc 2.x. .NET framework chứa các loại thời gian chạy và các thành phần.

Cài đặt phiên bản Visual Studio và phiên bản .NET framework xác định phiên bản ngôn ngữ c # và trình biên dịch tương thích có thể được sử dụng. Phiên bản c # mặc định và các tùy chọn được sử dụng trong dự án Visual Studio là phiên bản ngôn ngữ mới nhất được cài đặt tương thích với phiên bản .NET framework đang được sử dụng.

Để xem hoặc cập nhật ngôn ngữ Framework hoặc C # trong một dự án trong Visual Studio 2011:

  • bấm chuột phải vào dự án trong Solution Explorer và chọn Thuộc tính
  • chọn 'Ứng dụng' trong ngăn điều hướng bên trái. Trong khung Target: là phiên bản .NET framework. Chọn mũi tên xuống để xem tất cả các phiên bản khung có sẵn.

  • chọn 'Build' trong khung điều hướng bên trái. Trong phần 'Chung' của ngăn bên cạnh 'Phiên bản ngôn ngữ:' là phiên bản ngôn ngữ trình biên dịch c # đang được sử dụng, ví dụ 'mặc định' hoặc c # 5.0

  • chọn mũi tên xuống trong 'Phiên bản ngôn ngữ: "để xem tất cả các phiên bản ngôn ngữ có sẵn. Nếu' mặc định 'là phiên bản c # đang được sử dụng, phiên bản ngôn ngữ c # tương thích mới nhất sẽ được sử dụng.

Để xem phiên bản ngôn ngữ trình biên dịch chính xác cho 'mặc định', hãy nhập thông tin sau vào dấu nhắc lệnh của nhà phát triển cho phiên bản Visual Studio đã cài đặt của bạn. Ví dụ: từ biểu tượng Windows Start, chọn biểu tượng: "Nhắc lệnh nhà phát triển cho VS2011 'và nhập:

csc -langversion: Mặc định

Trình biên dịch Visual C # của Microsoft (R) phiên bản 4.7.3062.0 cho c # 5


0

Để lấy phiên bản C # từ mã, hãy sử dụng mã này từ tài liệu của Microsoft để lấy phiên bản .NET Framework và sau đó kết hợp nó với bảng mà mọi người khác đề cập. Bạn có thể mã hóa bản đồ Framework sang C # trong từ điển hoặc một cái gì đó để thực sự có chức năng của bạn trả về phiên bản C #. Hoạt động nếu bạn 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
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.