C# 7.0 是否适用于 .NET 4.5?

Does C# 7.0 work for .NET 4.5?

我在 Visual Studio 2017 RC 中创建了一个项目,以检查我是否可以在 .NET Framework 4.5 项目中使用新的 C# 7.0 语言功能。在我看来,在引用 System.ValueTuple NuGet 之后,新元组工作正常。还有什么我应该考虑的,或者这行得通吗?

检查 System.ValueTuple NuGet 依赖项后,似乎不支持 .NET Framework 4.0。是这种情况吗,或者是否有某种方法可以使新语言也在此运行时中工作?

让我们来看看 the features new in C# 7.0:

  • 元组:The System.ValueTuple packageportable-net40+sl4+win8+wp8 配置文件的版本。这意味着它可以在 .Net 4.0 上使用。 (不确定为什么依赖项只列出 .Net 4.5。)

    如果您想在更低版本的 .Net 上使用元组,只要您将 the code for ValueTuple and related types 添加到您的项目中,它应该仍然有效。

  • out 变量、模式匹配、局部函数、更多表达式体成员、throw 表达式、数字文字语法改进:所有这些功能只是语法糖,所以他们不需要框架的任何新功能。

  • ref locals 和 returns:此功能在 C# 中公开了框架从一开始就支持的内容,因此这里也不需要对框架进行任何更改。

  • 通用异步 return 类型:要使用此功能,您需要一个具有 AsyncMethodBuilder 属性的类型,该属性位于您自己的 the System.Threading.Tasks.Extensions package (along with one such type, ValueTask<T>). This package is only supported on .Net 4.5, so for .Net 4.0, you would need to compile the relevant types 中。 (在 .Net 4.0 上使用 await 也需要 Microsoft.Bcl.Async,但这并不是什么新鲜事。)

总结一下:安装所需的包后,所有 C# 7.0 都应该可以在 .Net 4.5 上运行,并且大部分也应该可以在 .Net 4.0 上运行。

运行 .NET 4.5 上的 C# 7 编译应用程序此时应该没问题,但请注意 运行宁 ASP.NET 使用 ASP.NET 动态编译的应用程序将无法在 .NET 4.5 上运行,因为 C# 7.0 编译器需要 .NET 4.6 才能 运行.

来源:https://github.com/dotnet/roslyn/issues/17908

The C# 7.0 compiler (2.0 and higher) requires .NET 4.6 to run

关于 https://www.nuget.org/packages/Microsoft.Net.Compilers/2.0.1 的信息(关于支持 .NET 4.5)似乎已经过时。