我在Visual Studio 2017 RC中创建了一个项目,以检查我是否可以在.NET Framework 4.5项目中使用新的C#7.0语言功能。在我看来,在引用System.ValueTuple
NuGet后,新的元组工作正常。还有什么我应该考虑的,或者这会起作用吗?
检查System.ValueTuple
NuGet依赖项后,看起来不支持.NET Framework 4.0。是这种情况,还是有一些方法可以让新语言在这个运行时工作?
答案 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)的信息似乎已经过时了。