如何根据ECMA-334标准强制Visual Studio(C#)编译源代码?

时间:2015-05-28 22:44:40

标签: c# visual-studio ecma

如何强制Visual Studio(C#)根据ECMA-334标准编译源代码?

例如,以下代码在ECMA-334标准中无效:

foreach (var item in custQuery)
{
    Console.WriteLine("Name={0}, Phone={1}", item.Name, item.Phone);
}

因为var不是ECMA-334标准关键字。我希望VS在这些情况下警告我。

2 个答案:

答案 0 :(得分:5)

您可以使用“语言版本”选项(在命令行中也称为langversion)。它位于构建选项卡上,位于高级选项下。在这种情况下,您可以选择ISO-2。

请注意,这是向后兼容模式。它只是禁止您使用在比指定版本更新的版本中可用的功能。

Eric Lippert拥有detailed explanation langversion选项的使用和目的。

要注意它不是完全向后兼容模式,请参阅文章中的这个示例:

class C
{
    public static bool operator < (C c1, C c2) { return true; }
    public static bool operator > (C c1, C c2) { return true; }
    public static bool operator < (bool b1, C c2) { return true; }
    public static bool operator > (bool b1, C c2) { return true; }

    static C H = new C();
    static C I = new C();
    static C J = new C();
    static void G(bool b) { }
    static void Main()
    {
        G ( H < I > ( J ) );
    }
}

设置langversion到C#1.0(ISO-1)禁止将其作为泛型的使用,但在该版本的编译器中它是合法的。

答案 1 :(得分:3)

Visual Studio和.NET Framework附带的编译器不是为了符合除最新版本(发布时)C#语言版本以外的任何内容。虽然可以选择诊断&gt; C#-2.0(ECMA-334)功能的使用,但是通过项目选项中的C#语言级别设置,这对于破坏已经完成的语言的更改没有任何影响。

C#2.0语言是Visual Studio 2005支持的语言。您可以安装免费提供的Express版本。