C#编译器版本和语言版本之间的差异
曾经有一段时间,我认为框架版本和C#版本是一样的,所以一旦你在计算机上安装了下一个框架版本,你就应该使用它 然后我发现框架与C版本没有直接联系,在同一台机器上,多个C编译器可以共存,因此编译器和C版本可能应该是相同的 现在我知道编译器版本和C#版本不一样了C#编译器版本和语言版本之间的差异,c#,.net,visual-studio-2010,compiler-construction,visual-studio-2013,C#,.net,Visual Studio 2010,Compiler Construction,Visual Studio 2013,曾经有一段时间,我认为框架版本和C#版本是一样的,所以一旦你在计算机上安装了下一个框架版本,你就应该使用它 然后我发现框架与C版本没有直接联系,在同一台机器上,多个C编译器可以共存,因此编译器和C版本可能应该是相同的 现在我知道编译器版本和C#版本不一样了 Visual Studio命令提示符(2010):C:\>csc Microsoft(R)Visual C#编译器版本4.0.30319.33440 适用于Microsoft(R).NET Framework 4.5 VS 2013的开发
Visual Studio命令提示符(2010):
C:\>csc
Microsoft(R)Visual C#编译器版本4.0.30319.33440适用于Microsoft(R).NET Framework 4.5
VS 2013的开发者命令提示符:
C:\>csc
Microsoft(R)Visual C#编译器版本12.0.30110.0对于C#5
我们可以看到
-VS2010为C#4使用了编译器版本4.0(我可以假设,因为没有明确提到)
-VS 2013使用C#5的编译器版本12.0(这是明确提到的) 知道这一点对用户来说很重要 问题
- 如何找出使用VS构建我的具体项目的C#version(不是编译器版本,而是语言版本)
- C#编译器和语言版本之间是否存在严格、清晰和透明的联系
- 我是否可以指示Visual Studio(在从一个Studio版本迁移到另一个Studio版本时)为我的具体解决方案使用不同的编译器版本
在我的特定项目中有ToolsVersion=“4.0”,我的目标项目是.Net 2.0。这意味着我可以在旧的框架中使用新的语言结构,而这在VS2005中是不可能的。只是为了补充前面的答案。 您应该知道,虽然C语言和C编译器与.Net framework是分开的,但它们仍然依赖于.Net framework 例如,C#5具有wait/async语言特性,但在.NET4中不能使用它,至少在没有一些额外的操作和nuget包的情况下不能
另一方面,您仍然可以在.Net 4.0中使用C#6的nameof或null传播特性,因为它们完全由编译器实现,以向Visual Studio指示要使用的语言版本有一个名为/langversion的编译器选项
您可以找到更多关于它的信息。
如前所述,它也可以通过编程进行设置。
编译器可以编译语言的不同版本,语言版本与框架的版本没有直接关系,但通常使用一种语言功能时,有一个它可以工作的最低框架。
几分钟前,我在VS2015中编译了一个dll,它使用c#6.0的字符串插值 并以框架4.0为目标。 它编译并运行良好。
解释版本纠缠,但仅适用于较旧的c#版本。由于没有人给出足够好的答案,我现在就尝试一下 首先,C#的版本历史现在由微软发布(显然来自MVP帖子) 因此,您可以很容易地看到每个新版本都添加了哪些新功能 其次,我们将讨论编译器版本,它最初是.NET Framework的一部分 下面我列出了几个里程碑(可能不是100%正确,有些版本可能会被跳过)
1.0(?)用于.NETFramework 1.0(实现C#1.0)csc.exe
2.0(Microsoft(R)Visual C#2005编译器版本8.00.50727.8745)用于.NET Framework 2.0(实现了C#2.0以及1.0的兼容性)csc.exe
3.5(Microsoft(R)Visual C#2008编译器版本3.5.30729.8763)用于.NET Framework 3.5(实现C#3.0和更早版本)csc.exe
4.0(?)用于.NETFramework4.0(实现C#4.0及更旧版本)csc.exe
4.x(类似于Microsoft(R)Visual C#编译器版本4.7.2053.0)用于.NET Framework 4.5及以上版本(实现C#5.0及更早版本)。请注意,根据计算机上的.NET Framework(4.5.0到4.7.1),版本号变化很大(从4.x到12.x)csc.exe
csc.exe
(因为它们是本机可执行文件),代之以基于Roslyn的编译器(尽管仍然是csc.exe
)。与此同时,C#编译器不再是.NET Framework的一部分,而是VS的一部分
同时,C#编译器、语言版本和.NET Framework完全解耦,因此您可以轻松地使用多目标
- Roslyn
1.x(?)实现了C#6.0及更高版本。VS2015随附csc.exe
- Roslyn
2.x(像Microsoft(R)Visual C编译器版本2.4.0.62122(ab56a4a6))实现了C#7.x和更旧版本。VS2017随附csc.exe
var version = 4;
var output = $"{version}";