有没有办法在Visual Studio 2008中使用2005 C#编译器?

Sha*_*awn 10 c# visual-studio-2008

我在一个项目上使用visual studio 2008/C#.我们使用的是.NET 2.0,并且在2.0版本中发布了任何版本的C#.我可以设置我的项目在VS 2008中使用.NET 2.0框架,但我无法弄清楚在哪里选择我的C#编译器.一般来说,这将是一个问题,但我的约90%的时间都花在了JS上,因此我var在C#中声明变量时不小心留下了一个声明.这在我的机器上编译很好,VS报告没有错误,然后它打破了构建.有没有办法在VS 2008中使用VS 2005中的旧C#编译器(抱歉我不知道是什么版本的#)?

Jon*_*eet 22

您不能告诉它使用C#2编译器,但您可以告诉它将自己限制为C#2语言.

在项目属性中,转到Build选项卡,单击右下角的"Advanced ..."按钮,那里有一个Language Version选项......你想要ISO-2.

请注意,这并不完美 - 它会阻止您使用大多数非C#-2功能,但某些更改仍可能通过.例如,我相信它仍将使用C#3中比C#2版本更强大的泛型类型推断.值得注意的是这一点.这是一个例子:

using System;

class Test
{
    static void Main()
    {
        Foo("hello", new object());
    }

    static void Foo<T>(T first, T second)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

C#2编译器无法决定T在调用中使用什么Foo,因为每个参数完全单独用于确定类型推断,并且任何相互矛盾的结果都会产生编译时错误.C#3使用每个参数上添加什么界限T 可以是,只给了一个错误,如果边界冲突(或者,如果不能确定一个类型参数).在C#2模式下调用时,C#3编译器仍使用C#3行为.

有什么理由你不能切换你的实际构建来使用.NET 3.5(C#3)编译器吗?因为你使用的是.NET 2,所以没有必要把自己束缚到C#2.哎呀,使用LINQBridge,你甚至可以使用LINQ to Objects :)

  • @Shawn:告诉你的团队领导或经理,或者Stack Overflow上的优秀人员希望提高你的工作效率,以及团队其他成员的工作效率:) (12认同)

Ree*_*sey 13

在项目属性中,转到"构建"选项卡,然后单击"高级",并将语言版本更改为ISO-2而不是C#3.这仍然使用新的2008编译器,但阻止您使用C#3.0功能,这应该在这里实现你的目标.