【问题标题】:PostSharp Conflicting Aspects warningPostSharp冲突方面警告
【发布时间】:2015-06-04 16:21:29
【问题描述】:

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

“MyNamespace.get_MyProperty”的冲突方面:转换 ".MyValidation1Attribute:被通知 OnGetValue 拦截, OnSetValue”和“MyNamespace.Validation2Attribute:被拦截 建议 OnGetValue, OnSetValue" 不是可交换的,但它们不是 强烈订购。它们的执行顺序是不确定的。

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

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

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

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

【问题讨论】:

    标签: c# visual-studio validation postsharp aop


    【解决方案1】:

    AspectTypeDependency 需要专业版。但是即使在 Express 版本中也应该包含 AspectTypeDependency 类型 - 然后应该存在使用非许可功能构建时间错误。

    您可以使用 AspectPriority:

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

    或者,您可以在方面构造函数中分配优先级。它比方面排序灵活得多,但至少它解决了警告。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 2017-07-15
      • 2015-12-12
      • 1970-01-01
      相关资源
      最近更新 更多