Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/275.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 一段普通代码,使用msbuild 14/VS 2015干净地构建,但无法在msbuild 15/VS 2017中编译_C#_Visual Studio 2015_Visual Studio 2017 - Fatal编程技术网

C# 一段普通代码,使用msbuild 14/VS 2015干净地构建,但无法在msbuild 15/VS 2017中编译

C# 一段普通代码,使用msbuild 14/VS 2015干净地构建,但无法在msbuild 15/VS 2017中编译,c#,visual-studio-2015,visual-studio-2017,C#,Visual Studio 2015,Visual Studio 2017,请注意,应用于程序的属性之间没有逗号。我非常惊讶地发现它是用msbuild 14/VS 2015编译的,但没有用msbuild 15/VS 2017编译 我的期望是看到它在两个版本中都失败 有人能解释发生了什么事吗 编辑1 以下是反射代码在Reflector中的显示方式: 我认为它能够在msbuild14中编译是一个bug C#v5语言(第394页)规定: 属性在属性部分中指定。属性部分 由一对方括号组成,围绕逗号 -一个或多个属性的分隔列表。在此类列表中指定属性的顺序,以及 附着到同一程序实体

请注意,应用于程序的属性之间没有逗号。我非常惊讶地发现它是用msbuild 14/VS 2015编译的,但没有用msbuild 15/VS 2017编译

我的期望是看到它在两个版本中都失败

有人能解释发生了什么事吗

编辑1

以下是反射代码在Reflector中的显示方式:


我认为它能够在msbuild14中编译是一个bug

C#v5语言(第394页)规定:

属性在属性部分中指定。属性部分 由一对方括号组成,围绕逗号 -一个或多个属性的分隔列表。在此类列表中指定属性的顺序,以及 附着到同一程序实体的节被排列,而不是 意义重大例如,属性规范[A][B], [B] [A]、[A,B]和[B,A]是等效的。

形式语法为:

您发布的语法,
[MyAttribute1 MyAttribute2]
未被考虑


因此,我假设它能够编译的是一个bug,他们在msbuild 15中修复了它。

您是否尝试过反射以查看是否实际应用了这两个属性?这对它们很好。现在我们有了回归。@马克实际上,编译失败是一个错误修复,而不是回归:D。不知道Visual Studio的早期版本是否编译了有缺陷的代码,但考虑到整个编译器是从头重写的,毫无疑问可能会有很多回归。@马克不是100%确定,但是,可以将您的项目配置为使用特定版本的msbuild生成-您可能希望了解这一点:@DanLing-我认为我们不希望被旧的msbuild所束缚。我们将只修复代码。
using System;

namespace ConsoleApplication1
{
    [AttributeUsage(AttributeTargets.Class)]
    public class MyAttribute1 : Attribute
    {
    }

    [AttributeUsage(AttributeTargets.Class)]
    public class MyAttribute2 : Attribute
    {
    }

    [MyAttribute1 MyAttribute2]
    class Program
    {
        static void Main(string[] args)
        {
        }
    }
}