PostSharp 多播在 Outlook 插件代码中不起作用

PostSharp Multicast not working in Outlook plugin code

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

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

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

.dll uses non-licensed features (PostSharp Professional). Please enter a valid license key.

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

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

不走运,它不会以这种方式记录任何内容。有什么想法吗?

附加信息: 我正在登录到 log4net,并且我有其他正在运行的日志记录代码(它也适用于 PostSharp 的 class 和方法级别)。

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

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

因此以下内容是正确的:

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

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

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