¿Funciona C # 6.0 para .NET 4.0?

Creé un proyecto de muestra, con los objetos buenos de C # 6.0 – la inicialización nula y la inicialización de propiedades como un ejemplo, establecí la versión de destino .NET 4.0 y … funciona.

public class Cat { public int TailLength { get; set; } = 4; public Cat Friend { get; set; } public string Mew() { return "Mew!"; } } class Program { static void Main(string[] args) { var cat = new Cat {Friend = new Cat()}; Console.WriteLine(cat?.Friend.Mew()); Console.WriteLine(cat?.Friend?.Friend?.Mew() ?? "Null"); Console.WriteLine(cat?.Friend?.Friend?.TailLength ?? 0); } } 
  • Wikipedia dice que .NET framework para C # 6.0 es 4.6.
  • Esta pregunta (y la prueba Visual Studio 2015 CTP) dice que la versión de CLR es 4.0.30319.0.
  • Esta página de MSDN dice que .NET 4, 4.5, 4.5.2 usa CLR 4. No hay información sobre .NET 4.6.

¿Significa que puedo usar las características de C # 6.0 para mi software que apunta a .NET 4.0? ¿Hay alguna limitación o desventaja?

Sí (principalmente). C # 6.0 requiere el nuevo comstackdor de Roslyn, pero el nuevo comstackdor puede comstackr orientando versiones anteriores de frameworks. Eso solo se limita a las nuevas funciones que no requieren soporte del marco .

Por ejemplo, aunque puede usar la función de interpolación de cadenas en C # 6.0 con versiones anteriores de .Net (ya que da como resultado una llamada a string.Format ):

 int i = 3; string s = $"{i}"; 

Necesita .Net 4.6 para usarlo con IFormattable ya que solo la nueva versión de framework agrega System.FormattableString :

 int i = 3; IFormattable s = $"{i}"; 

Los casos que mencionaste no necesitan tipos del marco para funcionar. Por lo tanto, el comstackdor es totalmente capaz de admitir estas características para versiones antiguas de framework.

Solo quiero enfocarme en cómo entender Wikipedia y otros enlaces.

Cuando Wikipedia dice que C # 6.0 está con .NET Framework 4.6, simplemente significa que la versión de producción del comstackdor (msc.exe) formará parte de la versión 4.6 de .NET Framework. A través de la segmentación múltiple , dichos comstackdores pueden admitir versiones más bajas de las versiones de .NET Framework. Por supuesto, desde que Roslyn se convirtió en un proyecto de código abierto, el comstackdor ahora es completamente un componente individual.

Cuando algo se refiere a la versión CLR de 4.0.30319 (.0), realmente puede ser .NET Framework 4. * (4.0, 4.0. *, 4.5, 4.5. *, 4.6, 4.6. *), Ya que todos implementan el CLR versión 4 especificación. Sin mencionar que Xamarin / Mono también implementa la misma especificación CLR.

La página de MSDN aún no está completamente actualizada, pero algunas páginas ya tienen .NET Framework 4.6 en la sección Información de la versión.

En general, las especificaciones de idioma (así como el comstackdor de C #), las especificaciones de CLR y las versiones de .NET Framework no están estrechamente unidas entre sí. Proporciona a los desarrolladores suficiente flexibilidad para utilizar nuevos comstackdores para centrarse en CLR anteriores y .NET Frameworks.

Sí, puede usar comstackdores más nuevos para marcos antiguos y obtener acceso a las nuevas características del comstackdor (siempre que esas características no requieran nuevos tipos introducidos en .NET 4.6).

Otros ejemplos de esto son los métodos con parámetros predeterminados que se introdujeron con C # 4.0 (.NET 4.0) pero puede usarlos en proyectos .NET 2.0 (C # 2.0) y .NET 3.5 (C # 3.0).

También puede usar los Métodos de extensión (introducidos en C # 3.0) en .NET 2.0 o .NET 3.0 si hace una pequeña solución para hacer que el comstackdor sea feliz y pueda encontrar un atributo que se introdujo en .NET 3.5.

Si está utilizando comstackciones de comstackción, recuerde cambiar la ruta a un nuevo comstackdor:

establecer CPATH = C: \ Archivos de progtwig (x86) \ MSBuild \ 14.0 \ Bin

[Rebuild.bat]

 set CPATH=C:\Program Files (x86)\MSBuild\14.0\Bin call nuget_restre.bat "%CPATH%\msbuild" YourSolution.sln /t:Rebuild /p:Configuration=Release /fileLogger /flp:logfile=JustErrors.log;errorsonly /verbosity:minimal if %errorlevel% neq 0 goto ERROR REM call deploy Release //Things like deploy files.. goto END :ERROR echo ERROR: %errorlevel% pause :END 

Respuesta de @oobe es realmente importante. Pude construir mi solución a través de un archivo por lotes solo después de usar MSBuild.exe desde C: \ Archivos de progtwig (x86) \ MSBuild \ 14.0 \ Bin .