一尘不染

自定义编译器警告

c#

在.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中生成编译器警告。


阅读 335

收藏
2020-05-19

共1个答案

一尘不染

更新资料

Roslyn(Visual Studio
2015)现在可以做到这一点。你可以建立一个代码分析器来检查自定义属性


我不认为有可能。ObsoleteAttribute由编译器专门处理,并在C#标准中定义。为什么地球上的ObsoleteAttribute不可接受?在我看来,这恰恰是它所针对的情况,并且恰好实现了您的要求!

还要注意,Visual Studio也会即时获取由ObsoleteAttribute生成的警告,这非常有用。

并不是要无益,只是想知道为什么您不热衷于使用它…

不幸的是ObsoleteAttribute是密封的(可能部分是由于特殊处理),因此您不能从中继承自己的属性。

从C#标准:

“过时”属性用于标记类型和不应再使用的类型成员。

如果程序使用用过时属性修饰的类型或成员,则编译器将发出警告或错误。具体而言,如果未提供错误参数,或者提供了错误参数且其值为false,则编译器会发出警告。如果指定了错误参数并且值为true,则编译器将发出错误。

那不是总结您的需求吗?…您做得不会比我想不到的要好。

2020-05-19