Проект Log4PostSharp, унаследованный от готового (и работающего) пользовательского атрибута - PullRequest
0 голосов
/ 05 сентября 2010

Необходимо изменить проект Log4PostSharp, унаследовав от готового (и работающего) пользовательского атрибута. Это выглядит примерно так:

  [AttributeUsage(
    AttributeTargets.Assembly | AttributeTargets.Class | AttributeTargets.Constructor | AttributeTargets.Method | AttributeTargets.Module | AttributeTargets.Struct,
    AllowMultiple = true,
    Inherited = false)]
  [MulticastAttributeUsage(
  MulticastTargets.InstanceConstructor | MulticastTargets.StaticConstructor | MulticastTargets.Method,
    AllowMultiple = true)]
#if SILVERLIGHT
  [RequirePostSharp("Log4PostSharp", "Log4PostSharp.Weaver.SilverlightLogTask")]
#else
  [RequirePostSharp("Log4PostSharp", "Log4PostSharp.Weaver.LogTask")]
  [Serializable]
#endif
  public sealed class LogWithExceptionAttribute : LogAttribute
  {
    public LogWithExceptionAttribute()
    {
      ExceptionLevel = LogLevel.Error;
    }

    ...
  }

Вот как я решил аннотировать код для юнит-теста:

[LogWithException]
private void DoThrowException()
{
  throw new Exception("test exception");
}

Хотел попробовать отладить процесс времени компиляции, попытался скомпилировать из командной строки, но не смог получить подсказку:

> msbuild Log4PostSharp.Test.csproj /p:PostSharpBuild=Diag /p:PostSharpTrace="AssemblyBinding;Project" /v:detailed

Как правильно решить проблему? Что я не так пытаюсь сделать?

1 Ответ

1 голос
/ 05 сентября 2010

В Log4PostSharp.Weaver.LogTask::ProvideAdvice() появилась следующая строка: var customAttributeEnumerator = customAttributeDictionaryTask.GetAnnotationsOfType(typeof(LogAttribute), true);.Второй атрибут GetAnnotationsOfType() был false, что означает, что должны быть обнаружены только LogAttribute аннотации.Изменение его на true привело к рассмотрению всех потомков LogAttribute (включая мой LogWithExceptionAttribute).

...