为什么VS2015允许.Net 4.5.2应用程序使用C#6.0函数?

Why does VS2015 allow C# 6.0 functions for .Net 4.5.2 applications?

本问题已经有最佳答案,请猛点这里访问。

我在Visual Studio 2015中遇到了一个奇怪的行为。我正在编写一个针对4.5.2.NET框架的应用程序:

.Net version

然后在应用程序中,我尝试使用一些在C 6.0(来自.NET 6.0)中实现的东西:

1
2
3
int number = 456;
var name = nameof(number);
string str = $"Time = {DateTime.Now}";

我很确定使用$nameof和字符串格式只能在.NET 4.6中使用,但是我仍然能够编译这个代码事件,尽管我的目标是4.5.2。

我在Visual Studio 2013中运行了相同的代码,也针对4.5.2版本,但这次我无法编译代码(找不到nameof)。

VS2015如何允许我编译在目标.NET框架版本中不允许的代码?

我在黑暗中的拍摄是,VS2015能够将C 6.0代码计算到CIL中,CIL仍然与以前的版本兼容,但我不确定这是否是正确的猜测。


C 6是语言C的新版本,它与.NET框架版本无关。因此,即使使用旧版本的.NET,也可以使用C 6。Roslyn编译器是随VS2015一起提供的新编译器,但可以作为独立版本安装在旧版本的VS上。所以基本上,Roslyn为您编译新特性,不管您使用的是什么框架版本。