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


69

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

检查System.ValueTupleNuGet依赖项后,看起来好像不支持.NET Framework 4.0。是这种情况,还是有某种方法可以使新语言在此运行时中运行?


我认为至少需要.NET 4.6.1,但您可能会放弃4.5。
Paulo Morgado

要检查的一件事是,是否需要通过dotnet build命令(例如从TFS)编译应用程序。我们遇到了各种各样的问题,试图通过dotnet build命令将目标语言设置为c#7的框架的v452编译为框架v452的.net核心应用程序,最终不得不将语言设置为c#6-幸运的是,这没有通过代码重构并不需要太多。
mattpm

Answers:


98

让我们看一下C#7.0中的新功能

  • 元组:System.ValueTuple包装具有的一个版本portable-net40+sl4+win8+wp8配置文件。这意味着它在.Net 4.0上可用。(不确定为什么依赖项仅列出.Net 4.5。)

    如果您想在甚至更低版本的.Net上使用元组,只要您将代码ValueTuple和相关类型的代码添加到项目中,它就仍然可以工作。

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

  • ref locals和return:此功能在C#中公开了自一开始以来所支持的框架,因此此处也无需更改框架。

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

总结:安装所需的软件包后,所有C#7.0都应在.Net 4.5上运行,并且大多数也应在.Net 4.0上运行。


30

目前,在.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)似乎已经过时。


3
问题不是关于运行编译器,而是关于运行编译的代码。
svick


2
如果您的应用程序使用动态编译(例如,asp.net托管应用程序),则意味着您不能在.NET 4.5上托管此应用程序,但是您正确地认为使用C#7编译器编译的某些应用程序可以工作-我将更新答案不久。
Michael Kaliszka'3
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.