как применить широкое решение аспекта Postsharp (все классы в пространстве имен)

Я пытаюсь изменить образец приложения трассировки, которое поставляется с Postsharp, чтобы трассировка применялась ко всем классам в моем пространстве имен без явного помещения [QuickTrace] поверх каждого класса. Я приложил скриншот. Что я делаю не так ? Щелкните правой кнопкой мыши, чтобы открыть/просмотреть изображение, чтобы увеличить его. благодарю вас

введите здесь описание изображения


person Gullu    schedule 30.08.2011    source источник
comment
Поверь мне, ты не захочешь этого делать..   -  person this. __curious_geek    schedule 30.08.2011
comment
При отслеживании большого приложения, чтобы понять, что оно делает, лучше сначала отследить все, а затем выборочно отключить классы/методы, которые не требуются, когда вы начнете понимать. Просто мое мнение. Благодарность   -  person Gullu    schedule 30.08.2011


Ответы (1)


Вы делаете это неправильно. Вы пытаетесь присвоить аспекты mscorelib, которые будут переносить вызовы любых методов, находящихся в mscorelib (не в вашем текущем приложении), но вы отрицаете это тем фактом, что вы говорите, что он должен применяться к методам только в пространство имен трассировки.

Просто используйте

[assembly: QuickTrace()]

Сделанный. В вашем аспекте добавьте следующее

[QuickTrace(AttributeExclude=True)]
[Serializable]
public QuickTrace : OnMethodBoundaryAspect
{
  //..Aspect code here
}
person Dustin Davis    schedule 30.08.2011
comment
Обновил мой ответ. Вам нужно исключить свой аспект из применения к вашему аспекту. - person Dustin Davis; 30.08.2011
comment
Теперь компилируется, но строки трассировки не выводятся на консоль. Исключено почти все решение/проект. В файле program.cs над пространством имен Trace у меня есть [сборка: QuickTrace(AttributeExclude = true)] спасибо - person Gullu; 30.08.2011
comment
Нет, вы добавляете это в свой класс ASPECT. Вы исключаете его из всего сейчас. - person Dustin Davis; 30.08.2011
comment
Вы не можете применить аспект к самому себе, вы получите stackoverflow (и тогда вы окажетесь в stackoverflow, спрашивая, почему) - person Dustin Davis; 30.08.2011
comment
Чтобы применить решение ко всему решению, примените атрибут сборки в каждом проекте или настройте сценарий сборки для включения проектов (дополнительно) или просто используйте AttributeTargetAssemblies, как вы это делали. Возможно, вам потребуется получить последнюю версию CTP. Имейте в виду, что не все типы аспектов будут работать с AttributeTargetAssemblies. Вам нужно будет добавить объявление для каждого проекта (сборки), нет возможности сделать это для ВСЕХ сборок. Также использование AttributeTargetAssemblies работает только для сборок, на которые имеются ссылки. - person Dustin Davis; 30.08.2011