为什么.net 4.6特定的代码在针对旧版本框架时可以编译?
本文关键字:框架 版本 编译 net 代码 为什么 | 更新日期: 2023-09-27 18:04:00
我有一个项目,目标是老版本的。net框架。净4.5.2)。我安装了Visual Studio 2015(因此在我的机器上安装了。net 4.6)。我注意到,如果我使用。net 4.6/c# 6中发布的c#语言特性,它仍然可以编译。如果我的项目的目标框架是<.NET 4.6,不应该不编译:
public string MyExpressionBodyProperty => "1";
//auto properties are new in C# 6
public string MyAutoProperty { get; } = "1";
private static void MethodThatUsesNameOf(string filename)
{
if (filename == null)
{
//nameof was released in C# 6
throw new ArgumentException("The file does not exist.", nameof(filename));
}
}
我如何确保我只使用。net语言功能,与框架版本工作,我的目标?
. net框架版本和c#语言版本是不同的东西。c# 6语言特性
public string MyAutoProperty { get; } = "1";
nameof(filename)
可以被VS 2015编译成针对早期框架的代码。
我如何确保我只使用。net语言功能,与框架版本工作,我的目标?
如果你试图使用。net 4.6框架特性,如果你的目标是一个更早的框架,你会得到一个适当的编译器错误。
我能把这段代码部署到没有。net 4.6的机器上吗?
是的,你会的。只要部署机器的框架与VS2015中的目标框架兼容。
有c# 6的特性和。net 4.6的特性。
nameof
是c# 6的一个特性,所以只需要在较新的编译器上运行,但仍然可以使用旧的。net框架。
一个需要。net 4.6支持的特性示例如下:
public void Foo(IReadOnlyCollection<string> input)
{
}
public void Main(string[] args)
{
Foo(new Stack<string>());
}
在。net 4.6中,Stack
实现了IReadOnlyCollection
,但在以前的版本中没有。如果选择。net 4.5.2作为目标平台,上述代码将无法编译。