c# .net-4.0 .net-4.5 c#-7.0

¿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 el portable-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 de throw , 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 paquete System.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 de await en .Net 4.0 también requiere Microsoft.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.