为什么VS 2015允许以空格分隔的属性,而VS 2017则不允许?

时间:2017-03-08 18:47:22

标签: c# visual-studio attributes

采用以下简单代码。 DoMyCode方法应用了两个属性,条目之间有空格。

using System;

namespace AttributeSpaceTesting
{
    class Program
    {
        static void Main(string[] args) { }

        [Horse Cow]
        static void DoMyCode() { }
    }

    [AttributeUsage(AttributeTargets.Method)]
    class HorseAttribute : Attribute { }

    [AttributeUsage(AttributeTargets.Method)]
    class CowAttribute : Attribute { }
}

这是在针对.Net 4.6的VS 2015中制作的。

如果您在Visual Studio 2015(更新3)中运行此代码,它将编译并运行,没有错误或警告。

但是,在Visual Studio 2017中运行完全相同的代码将产生以下异常:

Syntax error, ',' expected

我理解为什么发生此错误。我希望你在属性项之间需要逗号。在C#5规范的第17.2节中:

  

属性部分由一对方括号组成,它们围绕一个或多个属性的逗号分隔列表。

那么为什么这种语法在VS 2015中合法?

对于完整的上下文,我正在尝试在我的团队的单元测试项目中使用VS 2017。我注意到这样的行:

[Description(@"The Test Description")]
[TestCategory("Regression"), TestCategory("Module"), TestCategory("ModuleRegression") TestMethod]
public void TC_12345_VerifyTheThingWorks()

在新的Visual Studio系统中编译时会导致语法错误。

1 个答案:

答案 0 :(得分:12)

感谢Hans Passant分享此信息。

看来这确实是a bug with the roslyn compiler。据报道,2016年10月,也就是同年6月VS 2015的最后一次发布之后。

此修补程序已进入Visual Studio 2017,这就是为什么此语法被正确报告为错误。