我有一个针对旧版.NET Framework(.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语言功能?
答案 0 :(得分:20)
.NET Framework版本和C#语言版本是不同的东西。 C#6语言功能
public string MyAutoProperty { get; } = "1";
nameof(filename)
可以由VS 2015编译为针对早期框架的代码。
如何确保我只使用与我定位的框架版本兼容的.NET语言功能?
如果您尝试使用.NET 4.6 Framework功能,如果您的目标是早期框架,则会出现相应的编译器错误。
我是否可以将此代码部署到没有.NET 4.6的计算机上?
是的,你愿意。只要部署机器具有与您在VS2015中定位的框架兼容的框架。
答案 1 :(得分:12)
有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作为目标平台,则上述代码将无法编译。