Как я могу заставить VS2010 использовать 3.0 компилятора C# вместо 4,0?

Как я могу заставить VS2010 использовать 3.5 компилятора C# вместо 4,0?

Это это даже возможный, или у меня должен быть отдельный файл решения VS2008 для принуждения компиляции с 3,0 компиляторами?

(обновленный для фиксации версии компилятора #)

Обновление: Моя мотивация должна получить производительность разработки в VS2010, но это должно работать на сервере сборки, который не может иметь единственного бита.NET 4,0 двоичных файла на нем.

8
задан MatthewMartin 23 July 2010 в 13:57
поделиться

5 ответов

Я не верю, что вы можете это сделать. Вы можете установить языковую версию в свойствах проекта, но это не то же самое, что использовать компилятор C # 3 из .NET 3.5. Я считаю, что есть тонкие различия в выводе типов и разрешении перегрузки, например, где будут соблюдаться правила C # 4 вместо правил C # 3, даже при сборке как 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 с этим справится. Я подозреваю, что это ужасно запутается.

РЕДАКТИРОВАТЬ: Хорошо, теперь вы дали мотивацию, я думаю, вы можете сделать то, что мы делаем для Noda Time . У нас есть решение VS2010 и файл решения VS2008. Они оба загружают одни и те же проекты с атрибутом ToolsVersion , равным 4.0. Я не пробовал, но я полагаю , что он должен работать абсолютно нормально на машине с только .NET 3.5.

Возможно, вы захотите установить языковую версию на 3 , а также в своих файлах проекта, чтобы избежать случайного использования новых функций. Это не сделает вашу совместимость пуленепробиваемой, но если у вас есть все ваши модульные и интеграционные тесты, собранные и запущенные на сервере непрерывной сборки только для .NET 3.5, вас вряд ли укусят изменениями.

5
ответ дан 5 December 2019 в 18:55
поделиться

Невозможно сделать. Однако в этом нет особой необходимости, поскольку компилятор C # 4 может генерировать сборки, совместимые с .NET 2.0 (.NET 3.0 и 3.5 - это просто механизм выполнения 2.0 + новые компиляторы и библиотеки).

Вы уверены, что вам нужен компилятор C # 3 (поставляется с VS 2008 / .NET 3.5) или у вас достаточно хорошо совместимый вывод?

1
ответ дан 5 December 2019 в 18:55
поделиться

Вы можете сделать проект в VS2010 нацеленным на фреймворк 3.5 (не на компилятор).

Просто дважды щелкните папку свойств в проводнике решений (или щелкните правой кнопкой мыши на имени проекта) и на странице свойств, на вкладке Application, выберите целевой фреймворк. (Вы можете выбрать от Frameworks 4.0 до 2.0.)

.
0
ответ дан 5 December 2019 в 18:55
поделиться

если у вас установлен 3.5, вы должны иметь возможность выбрать фреймворк в свойствах проекта. Щелкните правой кнопкой мыши на названии проекта -> свойства

0
ответ дан 5 December 2019 в 18:55
поделиться

Вы не можете. Visual Studio 2010 использует компилятор 4.0, даже если вы ориентируетесь на framework 3.5.

Также не существует компилятора C # версии 3.5.

3
ответ дан 5 December 2019 в 18:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: