PostSharp组播无法在Outlook插件代码中使用

时间:2015-04-23 21:05:51

标签: c# logging postsharp

我在Outlook插件应用中使用PostSharp。如果我将以下属性添加到项目中的类中,则会正确记录:

namespace Foo.Bar
{
[Log(AttributeTargetMemberAttributes = MulticastAttributes.Public)]
public class FooBar {...}
}

我真正想做的是在Foo。*命名空间中记录所有内容。我尝试在VS中使用addin创建了globalaspects.cs并更新了我的project.pssln文件。此时它不会构建以下错误消息:

  

.dll使用非许可功能(PostSharp Professional)。请输入有效的许可证密钥。

我认为它正在递归,所以我在为我生成的装配线中添加了一个AttributeExclude = true。它现在看起来像这样(在globalaspects.cs中):

[assembly: Log(AttributeExclude = true, AttributeTargetTypes = "Foo.*", AttributeTargetTypeAttributes = MulticastAttributes.Public, AttributeTargetMemberAttributes = MulticastAttributes.Public)]

没有运气,它没有以这种方式记录任何东西。有什么想法吗?

其他信息: 我正在登录log4net,我还有其他正在运行的日志代码(它也适用于PostSharp的类和方法级别)。

1 个答案:

答案 0 :(得分:0)

根据this page,PostSharp的免费许可证目前对应用[Log]属性的方法数量有限制。在我看来,通过在整个命名空间中应用方面,你已经超过了这个数字。

AttributeExclude表示该属性不会应用于满足此属性中设置的条件的声明。它基本上是设置包含/排除操作。例如,您可以添加Namespace1,排除Namespace1.Namespace2并再次添加Namespace1.Namespace2.Namespace3

因此以下是正确的:

[assembly: Log(AttributeTargetTypes = "Foo.*",
               AttributeTargetTypeAttributes = MulticastAttributes.Public, 
               AttributeTargetMemberAttributes = MulticastAttributes.Public)]

有关属性多播的详细信息,您可以查看this article

评论者注意:我是开发PostSharp的开发人员之一。我知道这个答案涉及许可,这是红线的背后,我尽力不要过多。