是否可以编写一个破坏构建的自定义属性(如System.ObsoleteAttribute)?

时间:2011-08-17 08:00:49

标签: .net build custom-attributes

我想创建一个在构建过程中执行的自定义属性,并且可以根据某些逻辑中断构建,非常类似于System.ObsoleteAttribute

例如,请考虑以下C#代码(请注意,这是一个简化示例):

public class MyClass
{
    [Check]
    public int MyProp { get; private set; }
}

Check属性应检查它所装饰的属性是否具有公共setter。由于MyProp属性没有公共setter(它有私有setter),Check属性应该会破坏构建。

有可能吗?

1 个答案:

答案 0 :(得分:3)

不 - 至少,目前不是,使用标准构建工具。当“编译器即服务”项目出现时,完全可能会出现这种功能。但是C#编译器只是真正改变了它的一些众所周知的属性。

您可能需要考虑两个选项:

  • 使用PostSharp
  • 之类的内容进行后处理
  • 单元测试以查找所有属性并以这种方式检查

就我个人而言,我可能会选择后者...虽然真的,但没有太多明显的好处 - 如果你记得以声明的方式添加[Check]属性,你是不是要记得添加公共设置器?或者换句话说:如果你忘记来加入公共制定者,你是否只是忘记包含属性?