Есть проект, не будем на него показывать пальцем, в котором присутствует такой код
[Test, IncludeDataContextSource(ProviderName.SqlServer2005)] public void Sql2005 (string ctx) { RunScript(ctx, "\nGO\n", "SqlServer"); }
[Test, IncludeDataContextSource(ProviderName.SqlServer2008)] public void Sql2008 (string ctx) { RunScript(ctx, "\nGO\n", "SqlServer"); }
[Test, IncludeDataContextSource(ProviderName.SqlServer2012)] public void Sql2012 (string ctx) { RunScript(ctx, "\nGO\n", "SqlServer"); }
[Test, IncludeDataContextSource(ProviderName.SqlServer2014)] public void Sql2014 (string ctx) { RunScript(ctx, "\nGO\n", "SqlServer"); }
[Test, IncludeDataContextSource(TestProvName.SqlAzure)] public void SqlAzure2012 (string ctx) { RunScript(ctx, "\nGO\n", "SqlServer"); }
IncludeDataContextSource позволяет указать через запятую аргументы. То есть можно было бы написать
[Test, IncludeDataContextSource(ProviderName.SqlServer2005,ProviderName.SqlServer2008, ..., TestProvName.SqlAzure)]
public void MsSql (string ctx) { RunScript(ctx, "\nGO\n", "SqlServer"); }
Но это не интересно.
Хотелось бы сформировать отдельно массив с названиями и подсовывать в атрибут этот массив.
public static readonly string[] MsSql_Set001={ProviderName.SqlServer2005,ProviderName.SqlServer2008, ..., TestProvName.SqlAzure};
Потом этот массив можно было бы втыкивать в атрибуты других методов.
[Test, IncludeDataContextSource(MsSql_Set001)]
public void MsSql (string ctx) { RunScript(ctx, "\nGO\n", "SqlServer"); }
Но сделать это не получается:
Error CS0182 An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type Tests(netcoreapp2.0)
Собственно вопрос — какого такую полезную штуку до сих пор не поддерживают?
-- Пользователи не приняли программу. Всех пришлось уничтожить. --
Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>Есть проект, не будем на него показывать пальцем,
Шарепоинт?
P.S.
Конструктры атрибутов, в отличие от всех остальных конструкторов, вызываются при компиляции а не при джитте, пока весь код не скомпилен.
Потому использовать ваши статические мемберы как бы не хотелось в конструкторе увы нельзя.
Это с первого дотнета вроде так повелось.
Здравствуйте, VladCore, Вы писали:
VC>Здравствуйте, Коваленко Дмитрий, Вы писали:
КД>>Есть проект, не будем на него показывать пальцем,
VC>Шарепоинт?
НетАвтор: Коваленко Дмитрий
Дата: 26.11.17
VC>Конструктры атрибутов, в отличие от всех остальных конструкторов, вызываются при компиляции а не при джитте, пока весь код не скомпилен.
VC>Потому использовать статические мемберы как бы не хотелось в конструкторе увы нельзя.
VC>Это с первого дотнета вроде так повелось.
Да понятно.
Я вот подумал — всякие такие ограничения включают моск для поиска обходных путей. Которые, зачастую, оказываются даже лучше
-- Пользователи не приняли программу. Всех пришлось уничтожить. --