Tome el siguiente código simple. El método DoMyCode tiene dos atributos aplicados, con un espacio entre las entradas.
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 { } }Esto se hizo en VS 2015 dirigido a .Net 4.6.
Si ejecuta este código en Visual Studio 2015 (actualización 3), se compilará y ejecutará sin errores ni advertencias.
Sin embargo, ejecutar exactamente el mismo código en Visual Studio 2017 producirá la siguiente excepción:
Error de sintaxis, ',' esperado
Entiendo por qué ocurre este error. Espero que necesite comas entre los elementos de atributo. En la sección 17.2 de las especificaciones de C# 5:
Una sección de atributos consta de un par de corchetes que rodean una lista separada por comas de uno o más atributos.
Entonces, ¿por qué esta sintaxis es legal en VS 2015?
Para un contexto completo, estoy experimentando con el uso de VS 2017 en los proyectos de prueba de unidad de mi equipo. He notado líneas como esta:
[Description(@"The Test Description")] [TestCategory("Regression"), TestCategory("Module"), TestCategory("ModuleRegression") TestMethod] public void TC_12345_VerifyTheThingWorks()que causan errores de sintaxis cuando se compilan en el nuevo sistema de Visual Studio.
Gracias a Hans Passant que compartió esta información.
Parece que esto fue de hecho un error con el compilador roslyn . Se informó en octubre de 2016, mucho después del último lanzamiento de VS 2015 en junio del mismo año.
Esta solución llegó a Visual Studio 2017, por lo que esta sintaxis se notifica correctamente como un error.