如何从解决方案范围的方面排除某些程序集/类/方法

本文关键字:程序集 排除 方法 方面 解决方案 范围 | 更新日期: 2023-09-27 18:24:30

这些链接展示了如何添加解决方案范围的方面:

  1. 使用XML添加特性
  2. 解决方案级别特性和PostSharp配置文件
  3. 检测运行时的死锁

我的问题:假设添加了一些解决方案范围的方面,我如何排除某些程序集/类/方法/其他什么?

如何从解决方案范围的方面排除某些程序集/类/方法

AttributeExclude可用于从指定的元素集中删除相同属性类型的所有其他实例。

AutoDataContractAttribute可以使用PostSharp xml配置文件多播到MyNamespace.Customer:中的所有类

<my:AutoDataContractAttribute AttributeTargetTypes="MyNamespace.Customer" />

假设属性不应该是MyNamespace.Customer.Excluded命名空间中的多播类型。这可以通过添加:来实现

<my:AutoDataContractAttribute AttributeExclude="True" AttributeTargetTypes="MyNamespace.Customer.Excluded.*" />

整个示例:

<?xml version="1.0" encoding="utf-8"?>
<Project xmlns="http://schemas.postsharp.org/1.0/configuration">
    <Multicast xmlns:my="clr-namespace:MyCustomAttributes;assembly:MyAssembly">
        <my:AutoDataContractAttribute AttributeTargetTypes="MyNamespace.Customer" />
        <my:AutoDataContractAttribute AttributeExclude="True" AttributeTargetTypes="MyNamespace.Customer.Excluded.*" />
    </Multicast>
</Project>

当AttributeExclude为True时,还需要指定AttributePriority属性。使用XML时会自动完成,但在更复杂的情况下,这可能还不够,您需要显式指定AttributePriority。这可以通过使用属性声明性地添加方面来完成:

[assembly: AutoDataContractAttribute(AttributePriority = 1,
    AttributeTargetTypes="MyNamespace.Customer")]
[assembly: AutoDataContractAttribute(AttributeExclude = true,
    AttributeTargetTypes = "MyNamespace.Customer.Excluded.*",
    AttributePriority = 10)]