C# 自定义类型上的属性以期望使用其他属性标记的方法

C# 自定义类型上的属性以期望使用其他属性标记的方法,c#,attributes,C#,Attributes,我正试图在一个类型上创建一个自定义属性,该属性期望该类型中的某些属性被标记为另一个属性,类似于在中使用ServiceContract所做的操作: [服务合同] 公共接口ITestServiceContract { [经营合同] 无效操作(); } 如果ServiceContract中没有方法标记有OperationContract属性,则显示以下警告: 接口“ITestServiceContract”标记为ServiceContract,但不包含任何操作契约 查看ServiceContract

我正试图在一个类型上创建一个自定义属性,该属性期望该类型中的某些属性被标记为另一个属性,类似于在中使用
ServiceContract
所做的操作:

[服务合同]
公共接口ITestServiceContract
{
[经营合同]
无效操作();
}
如果
ServiceContract
中没有方法标记有
OperationContract
属性,则显示以下警告:

接口“ITestServiceContract”标记为ServiceContract,但不包含任何操作契约

查看
ServiceContract
的定义时,我看不出这将在何处定义:

[AttributeUsage(ServiceModelAttributeTargets.ServiceContract,Inherited=false,AllowMultiple=false)]
公共密封类ServiceContractAttribute:属性
{
...
}
ServiceModelAttributeTargets.ServiceContract
是外部定义的:

public const AttributeTargets ServiceContract=AttributeTargets.Interface | AttributeTargets.Class;

我有没有办法定义这样的属性?

您通常不会在属性本身中定义这种逻辑。该属性通常只是“位于”那里并包含一些数据。稍后检索属性时,将评估此类约束


发出一条警告消息,当不满足此类约束时,您可以实现一个自定义分析器,您将随附该分析器。您可以开始学习如何实现这样的分析器。

是的,这很有意义。谢谢你给我指出定制的roslyn分析仪,我想这就是我要尝试的。