我在Visual Studio 2017 RC中创建了一个项目,以检查是否可以在.NET Framework 4.5项目中使用新的C#7.0语言功能。在我看来,引用System.ValueTuple
NuGet之后,新的元组运行良好。还有什么我应该考虑的,还是行得通的?
检查System.ValueTuple
NuGet依赖项后,看起来好像不支持.NET Framework 4.0。是这种情况,还是有某种方法可以使新语言在此运行时中运行?
我在Visual Studio 2017 RC中创建了一个项目,以检查是否可以在.NET Framework 4.5项目中使用新的C#7.0语言功能。在我看来,引用System.ValueTuple
NuGet之后,新的元组运行良好。还有什么我应该考虑的,还是行得通的?
检查System.ValueTuple
NuGet依赖项后,看起来好像不支持.NET Framework 4.0。是这种情况,还是有某种方法可以使新语言在此运行时中运行?
Answers:
让我们看一下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上运行。
目前,在.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)似乎已经过时。