【问题标题】:Log aspect in PostSharp 5.0.23 not applied at assembly levelPostSharp 5.0.23 中的日志方面未在程序集级别应用
【发布时间】:2026-01-06 14:45:02
【问题描述】:

我正在遵循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()    
        {    
        }    
    }    
} 

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

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

【问题讨论】:

    标签: postsharp


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

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

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

      【讨论】:

        最近更新 更多