¿C#7.0 funciona para.NET 4.5?
.net-4.0 .net-4.5 (2)
Ejecutar una aplicación compilada C # 7 en .NET 4.5 debería estar bien en este momento, pero tenga en cuenta que ejecutar aplicaciones ASP.NET que usan ASP.NET Dynamic Compilation no funcionará en .NET 4.5 porque el compilador C # 7.0 requiere .NET 4.6 para correr.
Fuente: https://github.com/dotnet/roslyn/issues/17908 :
El compilador de C # 7.0 (2.0 y superior) requiere .NET 4.6 para ejecutarse
La información en https://www.nuget.org/packages/Microsoft.Net.Compilers/2.0.1 (sobre el soporte de .NET 4.5) parece estar desactualizada.
Creé un proyecto en Visual Studio 2017 RC para verificar si puedo usar las nuevas características del lenguaje C # 7.0 en un proyecto de .NET Framework 4.5.
Me parece que después de hacer referencia a
System.ValueTuple
NuGet, las nuevas tuplas funcionan bien.
¿Hay algo más en lo que deba pensar, o va a funcionar?
Después de verificar las dependencias de
System.ValueTuple
NuGet, parece que .NET Framework 4.0 no es compatible.
¿Es este el caso, o hay alguna manera de hacer que el nuevo lenguaje funcione también en este tiempo de ejecución?
Veamos las características nuevas en C # 7.0 :
-
Tuplas: El paquete
System.ValueTuple
tiene una versión para elportable-net40+sl4+win8+wp8
. Eso significa que se puede usar en .Net 4.0. (No estoy seguro de por qué las dependencias solo enumeran .Net 4.5.)Si desea utilizar tuplas en versiones aún más bajas de .Net, debería funcionar, siempre que agregue el código de
ValueTuple
y los tipos relacionados a su proyecto. -
variables de
out
, coincidencia de patrones, funciones locales, más miembros con cuerpo de expresión, expresiones dethrow
, mejoras de sintaxis literal numérica: todas estas características son solo azúcar de sintaxis, por lo que no necesitan nuevas capacidades del marco. -
ref
locales y devoluciones: esta característica expone en C # lo que el marco soportaba desde el inicio, por lo que tampoco se necesitan cambios en el marco aquí. -
Tipos de retorno asíncrono generalizado: para usar esta función, necesita un tipo que tenga el atributo
AsyncMethodBuilder
, que se encuentra en el paqueteSystem.Threading.Tasks.Extensions
(junto con uno de estos tipos,ValueTask<T>
). Este paquete solo es compatible con .Net 4.5, por lo que para .Net 4.0, deberá compilar los tipos relevantes usted mismo. (El uso deawait
en .Net 4.0 también requiereMicrosoft.Bcl.Async
, pero eso no es nada nuevo).
Para resumir: todo C # 7.0 debería funcionar en .Net 4.5 después de instalar los paquetes requeridos y la mayoría debería funcionar en .Net 4.0 también.