我想知道我使用的是哪个版本的c#。 如果我要使用python,我会从命令行执行类似python -V的操作,或者键入:

import sys
print sys.version

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

但是我不知道如何在c#中实现这一点。

这个问题并没有回答这个问题,尽管它的名字表明它应该回答这个问题。

我知道这取决于。net框架,但是否有一种编程方式来确定我的框架?我的意思是不需要进入目录并检查。net文件夹的名称。


当前回答

找到c#版本的有用提示:

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

来自微软文档中的c#语言版本控制。

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

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

至少在VS 2019中,你不需要为#error version编译代码来给出版本号。只要在代码中将鼠标移到它上,就会出现与编译代码时看到的相同的错误细节。

其他回答

目前的答案已经过时了。您应该能够使用#error version(在项目中任何c#文件的顶部,或几乎在代码的任何地方)。编译器以一种特殊的方式处理这个错误,并报告一个编译器错误CS8304,表示语言版本,也表示编译器版本。CS8304的消息如下所示:

编译器版本:'3.7.0-3.20312.3 (ec484126)'。语言版本:6。

对于Windows,您在命令/搜索程序行中运行dev,并为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\ Please,选择v…比如,最近去那里,

cd v4.0.30319

Run

csc

你会看到关于c#编译器版本的信息,这可以是类似的

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

要从代码中获得c#版本,请使用微软文档中的这段代码来获得. net框架版本,然后使用其他人都提到的表进行匹配。你可以在字典或其他东西中编写框架到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

要获得框架的版本-查看一个主要程序集的版本。

 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

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

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

你会看到如下内容:

微软(R) Visual c#编译器4.0.30319.34209 用于Microsoft (R) .NET Framework 4.5 微软公司版权所有。版权所有。

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