在.Net中使用ObsoleteAtribute时,它会向您提供编译器警告,告知您对象/方法/属性已过时,应使用其他方法。我目前正在从事一个需要大量重构前员工代码的项目。我想编写一个可用于标记方法或属性的自定义属性,该方法或属性将生成给出我所写消息的编译器警告。像这样
[MyAttribute("This code sux and should be looked at")] public void DoEverything() { } <MyAttribute("This code sux and should be looked at")> Public Sub DoEverything() End Sub
我希望它生成一个编译器警告,指出“此代码为sux,应予以注意”。我知道如何创建自定义属性,问题是如何使它在Visual Studio中生成编译器警告。
Roslyn(Visual Studio 2015)现在可以做到这一点。你可以建立一个代码分析器来检查自定义属性
我不认为有可能。ObsoleteAttribute由编译器专门处理,并在C#标准中定义。为什么地球上的ObsoleteAttribute不可接受?在我看来,这恰恰是它所针对的情况,并且恰好实现了您的要求!
还要注意,Visual Studio也会即时获取由ObsoleteAttribute生成的警告,这非常有用。
并不是要无益,只是想知道为什么您不热衷于使用它…
不幸的是ObsoleteAttribute是密封的(可能部分是由于特殊处理),因此您不能从中继承自己的属性。
从C#标准:
“过时”属性用于标记类型和不应再使用的类型成员。 如果程序使用用过时属性修饰的类型或成员,则编译器将发出警告或错误。具体而言,如果未提供错误参数,或者提供了错误参数且其值为false,则编译器会发出警告。如果指定了错误参数并且值为true,则编译器将发出错误。
“过时”属性用于标记类型和不应再使用的类型成员。
如果程序使用用过时属性修饰的类型或成员,则编译器将发出警告或错误。具体而言,如果未提供错误参数,或者提供了错误参数且其值为false,则编译器会发出警告。如果指定了错误参数并且值为true,则编译器将发出错误。
那不是总结您的需求吗?…您做得不会比我想不到的要好。