Встречаем сабж в ревизии
r9605.
Собственно давний
вопросАвтор: Пельмешко
Дата: 26.11.09
камрада Пельмешко можно закрыть.
Поддерживается Conditional-атрибут на классах-атрибутах и на методах.
К сожалению, без ломающих изменений обойтись не получилось.
Препроцессор теперь не позволяет выполнять define/undef в коде, только до всяческих объявлений (это поведение аналогично компилятору C#):
#define Foo // можно
using System;
#define Bar // ошибка компиляции
namespace MegaCorp.Product
{
...
}
Чего пока не сделано:
1) Проверка наследования override-методами Conditional-атрибута для классов, объявленных в собираемом проекте.
2) Нет запрета на получение делегата-функционального типа от Conditional-метода
Для интересующихся кишками: взовы Conditional-методов выбрасываются в T4, т.е. типизация аргументов полностью выполняется, их передача также выбрасывается.
Например:
#undef Bar
...
[Conditional("Bar")]
Bar(_ : int) : void { ... }
...
Bar({x(); y(); z(); 1})
Вызовы x, y, z и 1 непопадут в сборку