No creo que pueda hacerlo. Puede establecer una versión de idioma en las propiedades del proyecto, pero eso no es lo mismo que usar el compilador C# 3 de .NET 3.5. Creo que hay diferencias sutiles en todo tipo de inferencia y la resolución de sobrecarga, por ejemplo, donde se seguirá el C# 4 reglas en lugar de las reglas de C# 3, aun cuando se construye como C# 3. Aquí hay un ejemplo de ello:
using System;
class Test
{
static void Main()
{
CallFunc(Demo);
}
static int Demo() { return 5; }
static T CallFunc<T>(Func<T> func)
{
return func();
}
}
Esto se crea utilizando el compilador C# 4, incluso cuando especifica/langversion: 3 - pero no se compila con el compilador C# 3.
puede encontrar que puede modificar el archivo del proyecto para utilizar la versión anterior del compilador, pero no sé cómo lo haría con Visual Studio. Sospecho que se pondría terriblemente confundido.
EDITAR: Bien, ahora que ha dado la motivación, creo que es posible que desee hacer lo que hacemos para Noda Time. Tenemos una solución VS2010 y un archivo de solución VS2008. Ambos cargan los mismos proyectos, que tienen un atributo ToolsVersion
de 4.0. No lo he intentado, pero creo que cree que debe compilar absolutamente bien en una máquina con .NET 3.5.
Es posible que desee establecer la versión del idioma en 3 y en sus archivos de proyecto, para evitar el uso accidental de nuevas funciones. No hará que su compatibilidad sea a prueba de balas, pero si tiene todas sus unidades y pruebas de integración construidas y ejecutándose en un servidor de compilación continua .NET 3.5 solo, usted es improbable para ser mordido por los cambios.
Dado el número de encuestados que parecen suponer que desea orientar .NET 3.5 o que * no importa * que su código no pueda compilarse con la versión anterior de el compilador, creo que ayudaría a tu causa si pudieras dar más detalles :) –
Gracias por los detalles adicionales - He actualizado mi respuesta en consecuencia. –
Supongo, porque es un * servidor de compilación *, que desea que su código no solo * se ejecute * sin .NET 4, sino también * compile * sin .NET 4? –