C# PostSharp多播在Outlook插件代码中不起作用
我正在Outlook插件应用程序中使用PostSharp。如果我将以下属性添加到项目中的类,它将正确记录:C# PostSharp多播在Outlook插件代码中不起作用,c#,logging,postsharp,C#,Logging,Postsharp,我正在Outlook插件应用程序中使用PostSharp。如果我将以下属性添加到项目中的类,它将正确记录: namespace Foo.Bar { [Log(AttributeTargetMemberAttributes = MulticastAttributes.Public)] public class FooBar {...} } 我真正想做的是将所有内容记录在Foo.*名称空间中。我尝试在VS中使用加载项,它创建了一个globalaspects.cs并更新了我的project.pssl
namespace Foo.Bar
{
[Log(AttributeTargetMemberAttributes = MulticastAttributes.Public)]
public class FooBar {...}
}
我真正想做的是将所有内容记录在Foo.*名称空间中。我尝试在VS中使用加载项,它创建了一个globalaspects.cs并更新了我的project.pssln文件。此时,它不会生成以下错误消息:
.dll使用非授权功能(PostSharp Professional)。请输入有效的许可证密钥
我认为它本身是递归的,所以我在为我生成的装配线中添加了AttributeExclude=true。现在看起来是这样的(在globalaspects.cs中):
[程序集:日志(AttributeExclude=true,AttributeTargetTypes=“Foo.*,AttributeTargetTypeAttributes=MulticastAttributes.Public,AttributeTargetMemberAttributes=MulticastAttributes.Public)]
不走运,它不会以这种方式记录任何东西。你知道为什么吗
其他信息:
我正在登录log4net,并且我有其他正在运行的日志代码(它也可以在类和方法级别与PostSharp一起工作)。根据PostSharp的免费许可证,当前对应用[Log]
属性的方法的数量有限制。在我看来,通过在整个名称空间中应用方面,您已经超过了这个数字
AttributeExclude
表示该属性不会应用于满足该属性中设置的条件的声明。基本上是设置包含/排除操作。例如,您可以包括Namespace1
,排除Namespace1.Namespace2
,然后再次包括Namespace1.Namespace2.Namespace3
因此,以下是正确的:
[assembly: Log(AttributeTargetTypes = "Foo.*",
AttributeTargetTypeAttributes = MulticastAttributes.Public,
AttributeTargetMemberAttributes = MulticastAttributes.Public)]
有关属性多播的更多信息,可以查看
评论员注意:我是PostSharp的开发人员之一。我知道这个答案涉及到许可证问题,这是在红线之后,我已经尽了最大的努力,不要过多