PostSharp 冲突方面警告

PostSharp Conflicting Aspects warning

我在 VS2013 中使用 PostSharp Express 创建可应用于我的属性的验证方面。我关注了this PostSharp guide on location interception。它们都运行良好,但我收到数百条警告:

Conflicting aspects on "MyNamespace.get_MyProperty": transformations ".MyValidation1Attribute: Intercepted by advice OnGetValue, OnSetValue" and "MyNamespace.Validation2Attribute: Intercepted by advice OnGetValue, OnSetValue" are not commutative, but they are not strongly ordered. Their order of execution is undeterministic.

我认为这是我对同一属性设置多个验证方面的结果。首先,我尝试用逗号分隔属性,据我所知应该对它们进行排序:[Validation1,Validation2] 但警告仍然存在。

由于我的方面是可交换的(它们的执行顺序无关紧要),the PostSharp docs advise 使用 AspectTypeDependency 将它们标记为这样:

[AspectTypeDependency(AspectDependencyAction.Commute, typeof(ILocationValidationAspect))]

但是,PostSharp.Aspects.Dependencies 命名空间似乎未包含在 Express 许可下。是否有任何可能的解决方案来仅使用 Express 许可证来解决这些警告?或者这是否意味着我不能在不购买专业版或终极版的情况下使用多个方面?如果我能以这种方式删除这些警告,我愿意尝试实现我自己的依赖控制器。

AspectTypeDependency 需要专业版。但是 AspectTypeDependency 类型甚至应该包含在 Express 版本中 - 那么应该使用非许可功能构建时错误。

您可以使用 AspectPriority:

[Validation1(AspectPriority = 1), Validation2(AspectPriority = 2)]

或者,您可以在方面构造函数中指定优先级。它不如方面排序灵活,但至少它解决了警告。