Creé un proyecto de muestra, con extras de C # 6.0: propagación nula e inicialización de propiedades como 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 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 ninguna información sobre .NET 4.6.
¿Significa que puedo usar las funciones de C # 6.0 para mi software que apunta a .NET 4.0? ¿Hay alguna limitación o inconveniente?
Respuestas:
Sí (mayormente) C # 6.0 requiere el nuevo compilador de Roslyn, pero el nuevo compilador puede compilar para versiones de framework anteriores. Eso solo se limita a las nuevas características que no requieren soporte del marco .
Por ejemplo, si bien puede usar la función de interpolación de cadenas en C # 6.0 con versiones anteriores de .Net (ya que genera una llamada a
string.Format
):Necesita .Net 4.6 para usarlo,
IFormattable
ya que solo la nueva versión de marco agregaSystem.FormattableString
:Los casos que mencionó no necesitan tipos del marco para funcionar. Por lo tanto, el compilador es totalmente capaz de soportar estas características para versiones antiguas de framework.
fuente
IFormattable
interpolación de cadenas.Solo quiero centrarme en cómo entender Wikipedia y otros enlaces.
Cuando Wikipedia dice que C # 6.0 es con .NET Framework 4.6, simplemente significa que la versión de producción del compilador (msc.exe) formará parte de la versión .NET Framework 4.6. A través de la orientación múltiple , estos compiladores pueden admitir versiones inferiores de las versiones de .NET Framework. Por supuesto, desde que Roslyn se convirtió en un proyecto de código abierto, el compilador ahora es completamente un componente individual.
Cuando algo se refiere a la versión CLR de 4.0.30319 (.0), en realidad 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 implementan 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 total, las especificaciones de lenguaje (así como el compilador de C #), las especificaciones de CLR y las versiones de .NET Framework no están estrechamente relacionadas entre sí. Brinda a los desarrolladores suficiente flexibilidad para utilizar nuevos compiladores para apuntar a CLR y marcos de trabajo .NET más antiguos.
fuente
Sí, puede usar compiladores más nuevos para marcos más antiguos y obtener acceso a las nuevas funciones del compilador (siempre que esas funciones 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 feliz al compilador para que pueda encontrar un atributo que se introdujo en .NET 3.5.
fuente
Si está utilizando scripts de construcción, recuerde cambiar la ruta al nuevo generador:
establecer CPATH = C: \ Archivos de programa (x86) \ MSBuild \ 14.0 \ Bin
[Reconstruir.bat]
fuente
La respuesta de @oobe es realmente importante. Podría construir mi solución a través de un archivo por lotes solo después de usar MSBuild.exe desde C: \ Archivos de programa (x86) \ MSBuild \ 14.0 \ Bin .
fuente