如何让VS2010使用3.0 C#编译器而不是4.0?

Mat*_*tin 8 c# visual-studio-2010

如何让VS2010使用3.5 C#编译器而不是4.0?

它甚至可能,或者我是否需要一个单独的VS2008解决方案文件来强制使用3.0编译器进行编译?

(更新以修复编译器版本#)

更新:我的动机是获得在VS2010中开发的生产力,但它需要在构建服务器上运行,该服务器上可能没有一点.NET 4.0二进制文件.

Jon*_*eet 5

我不相信你能这样做.您可以在项目属性中设置语言版本,但这与使用.NET 3.5中的C#3编译器不同.我相信在类型推断和重载决策方面存在细微差别,例如,即使构建为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();
    }
}
Run Code Online (Sandbox Code Playgroud)

这使用C#4编译器构建,即使指定/ langversion:3 - 但它不使用C#3编译器构建.

可能会发现可以调整项目文件以使用以前版本的编译器 - 但我不知道Visual Studio将如何处理它.我怀疑它会变得非常混乱.

编辑:好的,现在你已经给出了动力,我想你可能想做我们为Noda Time做的事情.我们有VS2010解决方案和VS2008解决方案文件.它们都加载了相同的项目,其ToolsVersion属性为4.0.我没有尝试过,但我相信应该在只有.NET 3.5的机器上构建完全正常.

你可能想在语言版本设置为3 ,以及在项目中的文件,以避免意外使用的新功能.它不会使您的兼容性防弹,但如果您已经在仅支持.NET 3.5的连续构建服务器上构建和运行所有单元和集成测试,则您不太可能被这些更改所困扰.