PostSharp 5.0.23中的日志方面未在程序集级别应用

时间:2017-07-14 11:43:52

标签: postsharp

我正在遵循http://doc.postsharp.net/add-logging中提到的步骤。 Visual Studio版本是2017年,并安装了PostSharp 5.0.28扩展。将控制台后端的日志方面添加到整个项目时,将添加GlobalAspect.cs文件,但输出不显示日志跟踪。但是当我将[Log]属性应用于方法时,会看到日志跟踪。为什么GlobalAspect中的定义不适用?

using PostSharp.Patterns.Diagnostics;    
namespace ConsoleApp1    
{    
    [Log(AttributeExclude = true)]    
    public class Program    
    {    
        static void Main(string[] args)    
        {                 
            LoggingServices.DefaultBackend = new PostSharp.Patterns.Diagnostics.Backends.Console.ConsoleLoggingBackend();
        }            
        public static void f()    
        {    
        }    
    }    
} 

我在console和dll的GlobalAspects.cs文件中有以下条目。虽然它在dll中工作,但控制台却没有。

[assembly: Log(AttributeTargetTypeAttributes=MulticastAttributes.Public‌​, AttributeTargetMemberAttributes=MulticastAttributes.Public)] 

2 个答案:

答案 0 :(得分:0)

不幸的是,GlobalAspect似乎对控制台应用程序没有影响。在类库中,它确实工作得很好。

答案 1 :(得分:0)

在程序集级别应用[Log]方面时,它会根据指定的规则传播到程序集中的方法。

您可以设置AttributeTargetTypeAttributesAttributeTargetMemberAttributes等属性,以指定是否要定位公共,私有,实例,静态方法等。您还可以指定命名空间,类型和成员名称。

这些属性的默认值可能与您想要的不一致。您需要确保指定的属性与所需目标方法的特征匹配。

[Log(AttributeTargetTypeAttributes = MulticastAttributes.Public, AttributeTargetMemberAttributes = MulticastAttributes.AnyVisibility)]

您可以在此文档页面找到更多详细信息:http://doc.postsharp.net/attribute-multicasting