如何在命令行中确定C#编译器版本


How to determine C# compiler version in command line

有没有获得C编译器版本的命令?csc命令接缝没有显示编译器版本的选项。

附笔当我在developer command prompt for vs2015中输入csc命令时,它返回:

1
2
Microsoft (R) Visual C# Compiler version 1.3.1.60616
Copyright (C) Microsoft Corporation. All rights reserved.

不过,我非常肯定我的C编译器比1.3更新!


请记住,您的计算机上至少有两个版本的csc.exe。其中一个是作为.NET框架安装的一部分提供的,和以前一样,并遵循框架的版本号。存储在C:windowsmicrosoft.netframeworkv4.0.30319中,为了与system.codedom和sgen.exe兼容而保留在那里。冻结在C语言版本5。当大多数程序员的计算机上有.NET v4.7时,他们现在的版本是4.7.x.0。

另一个作为Roslyn项目的一部分分离出来,存储在msbuild目录中。重新设置版本号,从1开始编号。使用developer命令提示符时,将运行该命令。版本号重置的最可能原因是他们不想被锁定在框架发布的节奏中,Roslyn遭受了大量的错误,这些错误需要中间版本才能得到修复。解耦引起的一个显著问题是在C V7中添加了新的valuetuple类型,这是非常改进的tuple支持所需要的。在框架可用之前就已经发布了编译器,程序员不得不暂时放弃使用nuget包。

版本号重置不经常发生。但大家都知道的另一个好例子是.netcore,它从5.0重置为1.0。除了"避免混淆",我从来没有看到过一个确凿的理由,我认为这是一个让它看起来新鲜的举措。


作为对新ISH问题的直接了当回答[更新:Roslyn版本高于2,请参阅Cameron Macfarland的评论]CSC版本确实有一个/版本切换:

1
2
c:\>csc /version
2.3.2.62116 (8522b473)

出于脚本目的(如果你想打开版本,比如说),这可能就足够了,同时测试csc /version%errorlevel%以放置在一个太旧的桶中。

但是,/version并没有出现在https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-options/listed-alphabetical(这似乎是最新版本)上,我也找不到任何添加版本的列表。

更新:我也会非常小心CSC报告的版本号,例如我的个人"默认"在C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin
oslyn
中,并且有2.3.2.62116版本(和2017年9月22日的文件),但是我也有C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe版本和4.7.2046.0版本(和2017年3月18日的文件)(不带/version开关)。

所以回答

Is there any command to get the C# compiler version?

我会说,是的,也许,有时,但我会用一小撮盐来处理这个版本,看看我所报告的版本图章,就是csc.exe程序集的文件版本,它似乎来自于编译csc的"较大实体",至少对于rosyln和"tra"有不兼容的编号方案。第二个编译器。