PostSharpのドキュメントを読んだ後、解決策は、メソッドにアスペクト属性で注釈を付けてから、AttributeReplace=trueを指定することであるように思われます。これが私の質問に対する完全な解決策です。
コンストラクターでTraceLevelを取得するLoggingAspectAttributeという名前のクラスでロギングアスペクトを定義したとしましょう。AssemblyInfo.csに、次の定義を追加します。
[assembly: TracingAspect(TraceLevel.Info,
AttributeTargetTypes = "PostSharp2.*",
AttributeTargetTypeAttributes = MulticastAttributes.Public,
AttributeTargetMemberAttributes = MulticastAttributes.Private | MulticastAttributes.Public)]
PostSharp2は、ソリューションのテストに使用したアセンブリの名前です。この定義により、すべてのトレースがInformationTraceLevelになります。
この定義を上書きするには、次のようにします。
[TracingAspect(TraceLevel.Warning, AttributeReplace = true)]
private static void Bar()
{
Console.WriteLine("Inside Bar");
}
これにより、BarのトレースメッセージはWarning TraceLevelになり、他のすべてのメッセージはInformationトレースレベルのままになります。
ここで、AttributeReplaceプロパティを省略し、属性アノテーションを次のように残す場合:
[TracingAspect(TraceLevel.Warning)]
private static void Bar()
{
Console.WriteLine("Inside Bar");
}
Barから2つのトレースメッセージが表示されます。1つは情報レベルで、もう1つは警告レベルです。
それが誰かを助けることを願っています。