Возьмите следующий простой код. Метод 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 { }
}
Это было сделано в VS 2015 для таргетинга .Net 4.6.
Если вы запустите этот код в Visual Studio 2015 (обновление 3), он будет компилироваться и запускаться без ошибок или предупреждений.
Однако при запуске одного и того же кода в Visual Studio 2017 будет создано следующее исключение:
Syntax error, ',' expected
Я понимаю, почему эта ошибка происходит. Я ожидаю, что вам понадобится запятая между элементами атрибута. В разделе 17.2 спецификаций С# 5:
Раздел атрибутов состоит из пары квадратных скобок, которые окружают список, разделенный запятыми одним или несколькими атрибутами.
Итак, почему этот синтаксис закончен в VS 2015?
Для полного контекста я экспериментирую с использованием VS 2017 в проектах моей команды unit test. Я заметил такие строки:
[Description(@"The Test Description")]
[TestCategory("Regression"), TestCategory("Module"), TestCategory("ModuleRegression") TestMethod]
public void TC_12345_VerifyTheThingWorks()
которые вызывают синтаксические ошибки при компиляции в новой системе Visual Studio.