我正在编写一种TLV de- / serialization类。
与protobuf-net一样,我有一份合同归属于类和属性的成员。成员属性具有像protobuf中的标记号。 现在我想检查是否已经使用了Tag号,如果存在某种编译器错误,最好的解决方案就是。如果这有用,我也有postharp。 类结构如下所示:
[TlvContract]
public class Person{
[TlvMember(1)]
public String Name{get; set;}
[TlvMember(2)]
public Int32 ID{get; set;}
// This should create a warning or compile error!!!!
[TlvMember(1)]
public String Town{get; set;}
}
答案 0 :(得分:1)
除了Roslyn分析仪之外,PostSharp还是一种可行的方法。
以下是此类检查和错误输出的基本实现:
ITypeLevelAspect
它适用于您定义它的程序集。您只需要确保PostSharp实际运行在您希望检查工作的所有程序集上。
如果您的属性需要不同的基类,您还可以实现ITypeLevelAspectBuildSemantics
和{{1}}接口。