我正在使用哪个版本的C#


191

我想找出我正在使用哪个版本的C#。如果我要使用python python -V,则可以从命令行执行类似的操作,或键入:

import sys
print sys.version

在PHP中,我将执行以下操作:phpinfo();在Java中:java -version

但是我无法找到如何在C#中实现这一目标。

尽管顾名思义,该问题并未回答。

我知道它依赖于.NET框架,但是有没有一种编程的方式来确定我的框架?我的意思是不转到目录并检查我的.NET文件夹的名称。



5
在Visual Studio中:项目属性>构建>高级...>语言版本:codeproject.com/Tips/865579/…–
Slai

Answers:


65

要获取框架的版本-查看主要程序集之一的版本,即

 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不能告诉您正确的版本号-在我的PC上,安装了.NET 4.6 RC,但是Assembly.ImageRuntimeVersion报告v4.0.30319
Matt

1
除非您使用的C#6不会查看.NET版本。
Michael Puckett II

2
RE:Matt的评论:仅仅是因为您的PC上安装了一个.NET版本,并不意味着您的项目中正在使用该版本
LoJo,2015年

@LoJo-你绝对正确。一个原因是Visual Studio允许多目标(即,您可以在项目属性中选择.NET Target Framework版本),另一个原因是需要通过NUGET将较新的Roslyn版本添加到您的项目中。第三,正如我在这里所写,csc.exe仅限于5.0版本,不能用于检测更高版本的C#。
马特

3
尚未有人提到获取Roslyn编译器支持的版本列表的正确指令是“ C:\ Program Files(x86)\ Microsoft Visual Studio \ 2017 \ Community \ MSBuild \ 15.0 \ Bin \ Roslyn \ csc.exe” / langversion :?
戴维·格雷

231

这取决于.NET Framework您使用的。查看Jon Skeet关于版本的答案

这是他的答案的简短版本。

NET 1.0发布的C#1.0

C#1.2(非常有用); NET 1.1发布

NET 2.0发布的C#2.0

NET 3.5发布的C#3.0

NET 4发布的C#4.0

NET 4.5发布的C#5.0

NET 4.6发布的C#6.0

C#7.0.NET 4.6.2一起发布

C#7.3.NET 4.7.2一起发布

C#8.0NET Core 3.0一起发布


13
...,而C#6.0.NET 4.6
Matt

4
只是抬起头来;C#6使用不同的编译器(Roslyn),并将源代码编译为其他.NET版本,而不仅仅是.NET 4.6。
Michael Puckett II

6
...,并且C#7.0.NET 4.6.2
Jivan

12
但是您可以使用C#7.0编译器来编译.NET 2.0。检查.NET版本是一个非常有限的推论,并且仅给出可能的答案。
亚伯

5
让我添加到@Abel的评论中,该链接向您展示了如何独立于框架(几乎)更改C#语言版本。因此,您只能从语法错误中推断出,您所获得的代码假定使用的C#版本比在属性中选择的版本要新。
马特

87

尽管这不能直接回答您的问题,但我将其放在此处,因为当我在查找此信息时,谷歌在搜索中首先显示了此页面。

如果您使用的Visual Studio,你可以右键点击您的项目- >属性- >生成- >高级 这应该列出可用的版本,以及你的凸出正在使用一个。

在此处输入图片说明


6
如果在下拉列表中看到,Automatically selected based on framework version并且无法从下拉列表中选择任何内容(已禁用),我应该有什么版本?我现在用的是VS 2019
hellouworld

@hellouworld单击“为什么我不能选择其他C#版本超链接”,然后网页将为您提供参考...然后返回“应用程序”选项卡,查看您选择的目标框架。
约翰尼·吴

8

.NET版本通过注册表

HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ NET Framework Setup \ NDP \探索这些子级并查看每个版本。密钥为“ Full”的是系统上的版本。

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

通过Visual Studio的.NET版本

帮助->关于Microsoft Visual Studio-> .NET版本在右上角指定。

据我目前的理解,Visual Studio使用OS中的.NET Framework。

可以使用项目属性->应用程序->目标框架来修改Visual Studio中项目的目标.NET Framework版本。

通过dll

如果您知道.NET Framework目录,例如C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319

打开System.dll,右键单击->属性->详细信息选项卡

C#版本

帮助->关于Microsoft Visual Studio

在已安装的产品列表中,有Visual C#。就我而言,Visual C#2015

Visual Studio(Microsoft)通过名称Visual C#发行了C#。

https://msdn.microsoft.com/zh-CN/library/hh156499.aspx

C#6,Visual Studio .NET 2015当前版本,请参见下文


7

您使用的C#版本完全取决于您使用的.Net版本。

如果您使用Visual Studio进行开发,则可以选择.net框架版本,与此相关的c#版本将随之而来

这些是已知的C#版本:

  • .NET 1.0和VS2002 一起发布的C#1.0(2002年1月)
  • C#1.2(非常有用); .NET 1.1和VS2003(2003年4月)发布。第一个版本的呼叫DisposeIEnumerator该实施小号IDisposable。其他一些小功能。
  • C#2.0.NET 2.0和VS2005 一起发布(2005年11月)。主要的新功能:泛型,匿名方法,可为空的类型,迭代器块
  • C#3.0.NET 3.5和VS2008 一起发布(2007年11月)。主要新功能:lambda表达式,扩展方法,表达式树,匿名类型,隐式键入(var),查询表达式
  • C#4.0.NET 4和VS2010 一起发布(2010年4月)。主要的新功能:后期绑定(dynamic),委托和接口通用方差,更多的COM支持,命名参数和可选参数
  • C#5.0于2012年8月随.NET 4.5一起发布。

Refrence Jon Skeet的C#版本答案


U可以在.NET 2.0中使用C#3.0中的某些功能,因此它实际上不是1-1映射。
nefarel 2014年

13
这是错误的-它不依赖于.NET版本,而是依赖于编译器。
markmnl '16

这是完全错误的。我当前的项目设置为.NET 4.0,但是我仍然能够使用C#7.0功能。但是一旦我推送到远程,CI / CD系统就无法构建,因为它使用C#版本5或6
phuclv '19

这是不正确的,因为C#6.0
asaf92

6

默认情况下,以下是Visual Studio的C#编译器的相应版本:

  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)

4

如果您使用的是VS2015,请按照以下步骤进行操作:

  1. 右键单击该项目。
  2. 单击属性选项卡。
  3. 在属性窗口中,选择构建选项。
  4. 在那点击前进按钮。
  5. 在那里您将找到语言版本。

下图显示了相同的步骤:

第1步:

第1步

第2步:

第2步


4

感谢@fortesl和这个答案

我正在使用VS 2019,但它不会轻易告诉您正在使用的C#版本。我正在该环境中使用C#8使用.Net Core 3.0和VS 2019。但是“ 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需要与编码有关的答案
bradbury9

3

为了查看安装的VC#编译器版本:

打开Visual Studio命令提示符,然后键入csc,然后按Enter。

您将看到如下内容:

Microsoft(R)Visual C#编译器版本4.0.30319.34209

适用于Microsoft(R).NET Framework 4.5

版权所有(C)Microsoft Corporation。版权所有。

PS:“ CSC ”代表“ C Sharp编译器 ”。实际使用此命令运行csc.exe,这是一个位于“ c:\ Windows \ Microsoft.NET \ Framework \ vX.X.XXX”中的可执行文件。有关CSC的更多信息,请访问http://www.file.net/process/csc.exe.html


3

对于Windows,请在命令/搜索程序行运行dev,然后选择VS的Developer Command Prompt。那你就去跑步

csc

现在您获得类似于以下内容的信息

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

对于Windows,如果从cmd终端开始

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

现在,您将看到.NET \ Framework \中的所有目录和文件。请选择v ... Latest,然后转到那里,例如,

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.

1

默认情况下,基于项目的目标框架选择语言版本。

每个项目可能使用不同版本的.Net框架,默认情况下将通过查看目标框架来选择最合适的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框架和编译器版本如何关联,设置和修改的概述。每个项目都有一个目标.NET Framework版本,例如版本3.x或2.x。.NET框架包含运行时类型和组件。

Visual Studio版本的安装和.NET Framework版本确定了可以使用的兼容c#语言版本和编译器选项。Visual Studio项目中使用的默认c#版本和选项是所安装的最新语言版本,与使用的.NET Framework版本兼容。

要在Visual Studio 2011中查看或更新项目中的Framework或C#语言,请执行以下操作:

  • 在解决方案资源管理器中右键单击该项目,然后选择属性
  • 在左侧导航窗格中选择“应用程序”。在目标框架下:是.NET框架版本。选择向下箭头以查看所有可用的框架版本。

  • 在左侧导航窗格中选择“构建”。在“语言版本:”旁边窗格的“常规”部分中,使用的是C#编译器语言版本,例如“默认”或c#5.0

  • 在“语言版本:”下拉菜单中选择向下箭头以查看所有可用的语言版本。如果使用的默认c#版本为“默认”,则将使用最新的兼容c#语言版本。

要查看“默认”的确切编译器语言版本,请在开发人员命令提示符下为您安装的Visual Studio版本输入以下内容。例如,从Windows“开始”图标中选择图标:“ VS2011开发人员命令提示符”,然后输入:

csc -langversion:默认

适用于c#5的Microsoft(R)Visual C#编译器版本4.7.3062.0


0

要从代码获取C#版本,请使用Microsoft文档中的此代码获取.NET 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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.