Я не верю, что ты можешь сделать это. Вы можете установить языковую версию в свойствах проекта, но это не то же самое, что использование компилятора C # 3 из .NET 3.5. Я полагаю, что есть тонкие различия между выводом типа и разрешением перегрузки, например, где вместо правил C # 3 будут соблюдаться правила C # 4, даже при сборке как C # 3. Вот пример этого:
using System;
class Test
{
static void Main()
{
CallFunc(Demo);
}
static int Demo() { return 5; }
static T CallFunc<T>(Func<T> func)
{
return func();
}
}
Эта сборка выполняется с использованием компилятора C # 4, даже когда вы указываете / langversion: 3, но не компилируется с помощью компилятора C # 3.
Вы можете обнаружить, что вы можете настроить файл проекта для использования предыдущей версии компилятора - но я не знаю, как Visual Studio справится с этим. Я подозреваю, что это ужасно запуталось.
РЕДАКТИРОВАТЬ: Хорошо, теперь вы дали мотивации, я думаю, вы можете сделать то, что мы делаем для Время Нода . У нас есть решение VS2010 и файл решения VS2008. Они оба загружают одни и те же проекты, которые имеют атрибут ToolsVersion
4.0. Я не пробовал, но я считаю , что должно прекрасно работать на машине только с .NET 3.5.
Возможно, вы захотите установить для языковой версии 3 , а также в файлах проекта, чтобы избежать случайного использования новых функций. Это не сделает вашу совместимость пуленепробиваемой, но если у вас есть все ваши модульные и интеграционные тесты, собирающиеся и работающие на сервере непрерывной сборки только для .NET 3.5, вы вряд ли будете укусить по изменениям.