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

Luk*_*ský 63 c# .net-4.0 .net-4.5 c#-7.0

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

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

svi*_*ick 92

让我们来看看C#7.0中的新功能:

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

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

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

  • ref locals和returns:此功能在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上运行.


Mic*_*zka 26

在.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认同)
  • 如果您的应用程序使用动态编译(即 asp.net 托管应用程序),那么这意味着您不能在 .NET 4.5 上托管此应用程序,但您是正确的,一些使用 C# 7 编译器编译的应用程序可以工作 - 我会更新我的答案不久。 (2认同)