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更新!
- 您的计算机上可以有多个版本的编译器。stackoverflow.com/questions/19532942/…和stackoverflow.com/questions/22814922/…透露了一些信息
- 只是因为编译器是1.3并不意味着它不能做.l.net 4.5/6,它只是意味着他们不必更改太多。
- 当每个dev命令提示符都有自己的变量集(包括带有csc的变量集)并且您可以在硬盘上放置多个csc时,情况就不是这样了吗?
- 当我从developer command prompt for vs2015运行csc时,它报告版本1.3.1.6016。当我从developer command prompt for vs2012运行csc时,它报告4.7.2053.0。
- @paulf所以它和我上面写的一样,在vs2017上运行csc,它读到2.4.0.62225(至少对我来说)。
- @M.Rogalski:同意-看看路径环境变量,它们是不同的-但是在那里太多了,无法找到先找到哪个版本。在我的电脑上有19个csc.exe实例-从版本1.0.0.xxx到版本8.0.xx.xxx不等
- @Adyson如果我使用csc /out:My.exe File.cs命令,那么默认版本是什么?
- 尝试从命令行运行"where csc.exe"-它将列出当前目录中找到的所有事件,然后通过path环境变量。这是第一个被执行的。
- @Paulf谢谢,它重新生成了.....\v4.0.30319\csc.exe,这意味着我的C版本是4?
- 您可以在Windows资源管理器中转到该文件夹,右键单击以获取属性。它只列出一次事件吗?您是否在相同的开发人员命令提示符下运行?我本以为这会显示版本4号。
- @保罗不,另一个是埃多克斯。是的,同样的提示。\MSBuild\14.0\Bin\csc.exe的文件属性显示为1.3.1.60616!?!是否可以在命令行中找到它?
- 让我们在聊天中继续讨论。
- 在大多数情况下,C编译器版本很少使用。使用的msbuild版本更重要。下面的答案已经很好地分享了很多信息,我有两篇博文,更多,C编译器的历史和msbuild的历史。
请记住,您的计算机上至少有两个版本的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"有不兼容的编号方案。第二个编译器。
- VS2015中无法识别的选项!我想你的意思是新ISH的VS2017
- /version参数在Roslyn的版本2中实现。github.com/dotnet/roslyn/issues/7588