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

时间:2017-02-27 09:51:44

标签: c# .net-4.0 .net-4.5 c#-7.0

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

检查System.ValueTuple NuGet依赖项后,看起来不支持.NET Framework 4.0。是这种情况,还是有一些方法可以让新语言在这个运行时工作?

2 个答案:

答案 0 :(得分:87)

让我们通过the features new in C# 7.0

  • 元组:The System.ValueTuple package包含portable-net40+sl4+win8+wp8个人资料的版本。这意味着它可以在.Net 4.0上使用。 (不确定为什么依赖项仅列出.Net 4.5。)

    如果你想在更低版本的.Net上使用元组,只要你将the code for ValueTuple and related types添加到你的项目中,它仍然可以工作。

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

  • ref本地和返回:此功能在C#中公开了自开始以来支持的框架,因此这里也不需要对框架进行任何更改。

  • 广义异步返回类型:要使用此功能,您需要一个AsyncMethodBuilder属性的类型,该属性位于the System.Threading.Tasks.Extensions package(以及一个此类型ValueTask<T> )。此软件包仅在.Net 4.5上受支持,因此对于.Net 4.0,您需要自己编译the relevant types。 (在.Net 4.0上使用await也需要Microsoft.Bcl.Async,但这并不是什么新鲜事。)

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

答案 1 :(得分:22)

此时在.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

  

C#7.0编译器(2.0及更高版本)需要运行.NET 4.6

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