我使用的是哪个版本的 C#

Posted

技术标签:

【中文标题】我使用的是哪个版本的 C#【英文标题】:Which version of C# am I using 【发布时间】:2013-10-23 04:42:38 【问题描述】:

我想知道。 如果我要使用 python,我会从命令行执行python -V 之类的操作,或者输入:

import sys
print sys.version

php 中我会这样做:phpinfo(); 在 java 中:java -version

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

This question 没有回答它,尽管顾名思义应该回答。

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

【问题讨论】:

【参考方案1】:

这取决于您使用的 .NET Framework。检查Jon Skeet's answer 的版本。

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

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.0NET Core 3.0

一起发布

C# 9.0NET 5.0

一起发布

C# 10.0NET 6.0

一起发布

【讨论】:

这里是微软文档:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…【参考方案2】:

虽然这不是直接回答您的问题,但我将其放在这里是因为当我在寻找此信息时,Google 在我的搜索中首先显示了此页面。

如果您使用的是 Visual Studio,您可以右键单击您的项目 -> 属性 -> 构建 -> 高级 这应该列出可用版本以及您的项目正在使用的版本。

【讨论】:

这不再适用 - 请参阅:docs.microsoft.com/en-us/dotnet/csharp/language-reference/…【参考方案3】:

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

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

获取 C# 编译器的版本有点困难,但您应该能够通过检查使用的框架版本来猜测版本。

如果您使用的是命令行编译器 (csc.exe),您可以查看帮助以查看版本(您也需要知道框架版本:

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

【讨论】:

这很奇怪,我正在使用 .net 5 进行项目并获得版本 v4.0.30319 的程序集。【参考方案4】:

从开发者命令提示符类型

csc -langversion:?

这将显示所有支持的 C# 版本,包括默认版本:

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

【讨论】:

【参考方案5】:

上面的大部分答案都是正确的。只需合并 3 个,我发现它既简单又超级快速。现在在 VS2019 中也无法实现 #1。

    Visual Studio:项目 > 属性 > 构建 > 高级 这个选项现在被禁用了,默认语言由VS自己决定。详细原因可here。

    在代码(.cs)中任意位置输入“#error version”,鼠标悬停。

    转到“Visual Studio 的开发人员命令提示符”并运行以下命令。 csc -langversion:?

阅读更多提示:here。

【讨论】:

提示 #2,Type "#error version" hover 特别有用,尤其是如果您的机器上安装了多个不同版本的 Visual Studio(这几乎是地球上的每一个人)【参考方案6】:

查找 C# 版本的有用提示:

要了解您当前使用的语言版本,请在您的代码中输入#error version(区分大小写)。这使得编译器产生 诊断 CS8304,带有包含编译器版本的消息 正在使用和当前选择的语言版本。

来自 MS 文档中的 C# language versioning。

您可以将#error version 放在代码中的任何位置。它会产生一个错误,因此您需要在使用后将其删除。该错误给出了编译器和语言版本的详细信息,例如:

Error   CS8304  Compiler version: '3.7.0-6.20459.4 (7ee7c540)'. Language version: 8.0.

至少在 VS 2019 中,您无需为 #error version 编译代码即可为您提供版本号。只需在代码中将鼠标悬停在它上面,就会显示与编译代码时相同的错误详细信息。

【讨论】:

【参考方案7】:

.NET 版本通过注册表

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\ 探索孩子并查看每个版本。带有“Full”键的那个是系统上的版本。

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

.NET 版本通过 Visual Studio

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

据我目前了解,Visual Studio 使用操作系统中的 .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/en-us/library/hh156499.aspx

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

【讨论】:

【参考方案8】:

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

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

这些是已知的 C# 版本:

C# 1.0.NET 1.0 和 VS2002 一起发布(2002 年 1 月) C# 1.2(很奇怪);与 .NET 1.1 和 VS2003(2003 年 4 月)一起发布。第一个在IEnumerators 上调用Dispose 的版本实现了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 一起发布。

参考Jon Skeet's C# Versions Answer

【讨论】:

【参考方案9】:

如果您使用的是 VS2015,请按照以下步骤找出相同的内容:

    右键单击项目。 点击属性标签。 从属性窗口中选择构建选项。 点击Advance按钮。 在那里您可以找到语言版本。

下图显示了相同的步骤:

第 1 步:

第 2 步:

【讨论】:

【参考方案10】:

感谢@fortesl 和this answer

我正在使用 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.

【讨论】:

是您在 vs 中使用的“(默认)”吗? @Hacki,是的,除非您指定不同的语言版本,否则编译器将使用默认值。 感谢@guyr。但是,为什么我不能使用 .net 核心创建 winforms 和 wpf 应用程序?如果我搜索“winforms”或“wpf”,则只有 .net 和 .net 框架可用。但是,控制台应用程序有一个可用的 .net 核心。我现在真的很困惑。 :( docs.microsoft.com/en-us/dotnet/desktop/winforms/migration/…【参考方案11】:

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

    Visual Studio 2015:C# 6.0 Visual Studio 2013:C# 5.0 Visual Studio 2012:C# 5.0 Visual Studio 2010:C# 4.0 Visual Studio 2008:C# 3.0 Visual Studio 2005:C# 2.0 Visual Studio.NET 2003:C# 1.2 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"

【讨论】:

有人说它依赖于 .NET 框架,但对我来说不是这样。我在 VS 2015 中安装了框架 4.7.2,C# 版本是 6.0,所以说它取决于 VS 版本看起来更准确。 @Jamo 它确实取决于目标框架。例如,.NET Core 3.x 默认为 C# 8。 .NET 5.0 默认为 C# 9。 .NET 6.0 默认为 C# 10,等等。【参考方案12】:

当前的答案已经过时。您应该能够使用#error version(在项目中任何 C# 文件的顶部,或几乎在代码中的任何位置)。编译器对此进行了特殊处理,并报告编译器错误 CS8304,指示语言版本以及编译器版本。 CS8304 的消息如下所示:

错误 CS8304:编译器版本:“3.7.0-3.20312.3 (ec484126)”。语言版本:6。

【讨论】:

这个答案是唯一对我有用的,谢谢!【参考方案13】:

语言版本默认根据项目的目标框架选择。

每个项目可能使用不同版本的 .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

【讨论】:

【参考方案14】:

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

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

您将看到如下内容:

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

适用于 Microsoft (R) .NET Framework 4.5

版权所有 (C) Microsoft Corporation。保留所有权利。

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

【讨论】:

【参考方案15】:

对于 Windows,您可以在命令/搜索程序行运行 dev 并选择 Developer Command Prompt for VS。那你就跑吧

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.

【讨论】:

【参考方案16】:

在 Visual Studio 2022 中,我们可以在高级选项卡中的 build 中检查项目属性

Screenshot of how to check c# version in visual studio 2022

【讨论】:

【参考方案17】:

这里概述了 .NET 框架和编译器版本是如何关联、设置和修改的。每个项目都有一个目标 .NET 框架版本,例如版本 3.x 或 2.x。 .NET 框架包含运行时类型和组件。

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

在 Visual Studio 2011 中查看或更新项目中的框架或 C# 语言:

右键单击解决方案资源管理器中的项目并选择 属性

在左侧导航窗格中选择“应用程序”。在 Target framework: 下是 .NET framework 版本。选择向下箭头以查看所有可用的框架版本。

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

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

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

csc -langversion:默认

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

【讨论】:

【参考方案18】:

在 Visual Studio 中,当构建详细程度设置为“正常”或更高(默认为“最小”)时,通过查看构建输出来查看 C# 语言版本。

    将构建输出的详细程度调整为“正常”、“详细”或“诊断”。 (其他两个值,“安静”和“最小”不显示语言版本。)要设置构建输出详细程度,请选择菜单工具 |选项...,然后在“选项”对话框中,选择“项目和解决方案”| “构建并运行”。查找标签“MSBuild 项目输出详细程度”。设置为上面给出的三个值之一。

    构建(如果您的构建是最新的,请使用菜单选择 Build | Rebuild 强制构建。)

    打开输出窗口 菜单选择 查看 |输出。

    在输出窗口中,为标记为“显示输出自:”的项目设置“构建”

    搜索“语言版本”。在一个非常非常长的行中间(我的机器上现在有 1578 个字符)寻找这样的开关:/langversion:9.0

(要在“输出”窗口中搜索,请在“输出”窗口中单击,然后使用键盘快捷键 Ctrl+F 来召唤搜索窗格。)

【讨论】:

【参考方案19】:

要从代码中获取 C# 版本,请使用来自 the Microsoft documentation 的代码获取 .NET Framework 版本,然后使用其他人提到的 the table 匹配它。您可以将框架编码到字典中的 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

【讨论】:

以上是关于我使用的是哪个版本的 C#的主要内容,如果未能解决你的问题,请参考以下文章

哪个 C# 编译器版本可以使用 CSharpCodeProvider 类编译 C# 7.3?

MySql.Data c# .net 库我应该使用哪个运行时?

如何检查我使用的是哪个版本的 Angular?

如何知道我使用的是哪个版本的 C 语言?

如何判断我使用的是哪个 Android 支持库 v4 版本?

我使用的是哪个版本的 MVC?