【问题标题】:How to force Visual Studio (C#) to compile sources according to ECMA-334 standard?如何强制 Visual Studio (C#) 根据 ECMA-334 标准编译源代码?
【发布时间】:2015-05-28 22:44:40
【问题描述】:

如何强制 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 在这些情况下警告我。

【问题讨论】:

  • 你看过这样的东西吗? visualstudiogallery.msdn.microsoft.com/…
  • 尽管如此,但很少有充分的理由。根据现代编程语言标准,ECMA-334 是古老的。您错过了 var、扩展方法、lambda 函数、对象初始化器、方差、可选参数、等待/异步等等。这还不包括 C#6 中的所有优点

标签: c# visual-studio ecma


【解决方案1】:

您可以使用“语言版本”选项(在命令行中也称为 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) 禁止使用泛型,但在该版本的编译器中是合法的。

【讨论】:

    【解决方案2】:

    Visual Studio 和 .NET Framework 附带的编译器不符合除最新(发布时)C# 语言版本以外的任何内容。尽管可以通过项目选项中的 C# 语言级别设置来诊断 >C#-2.0 (ECMA-334) 功能的使用情况,但这对此后对语言所做的重大更改没有影响。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-24
      • 2019-09-05
      • 2019-12-16
      • 1970-01-01
      • 1970-01-01
      • 2010-11-14
      • 2012-03-13
      • 2014-02-01
      相关资源
      最近更新 更多