猿问

自定义编译器警告

自定义编译器警告

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


蝴蝶不菲
浏览 303回答 3
3回答

动漫人物

更新现在可以使用Roslyn(Visual Studio 2015)。你可以建立一个代码分析器来检查自定义属性我不相信这是可能的。ObsoleteAttribute由编译器专门处理,并在C#标准中定义。为什么ObsoleteAttribute不被接受?在我看来,这正是它所设计的情况,并准确地实现了您的需求!另请注意,Visual Studio也会即时获取由ObsoleteAttribute生成的警告,这非常有用。不要意味着无益,只是想知道你为什么不热衷于使用它...不幸的是,ObsoleteAttribute是密封的(可能部分是由于特殊处理),因此您无法从中继承自己的属性。从C#标准: -属性Obsolete用于标记不再使用的类型和类型成员。如果程序使用使用Obsolete属性修饰的类型或成员,则编译器会发出警告或错误。具体而言,如果未提供错误参数,或者提供了错误参数且值为false,则编译器会发出警告。如果指定了error参数并且值为true,则编译器会发出错误。这不能总结你的需求吗?......你不会做得比我想象的更好。

慕尼黑8549860

在某些编译器中,您可以使用#warning发出警告:#warning&nbsp;"Do&nbsp;not&nbsp;use&nbsp;ABC,&nbsp;which&nbsp;is&nbsp;deprecated.&nbsp;Use&nbsp;XYZ&nbsp;instead."在Microsoft编译器中,您通常可以使用消息编译指示:#pragma&nbsp;message&nbsp;(&nbsp;"text"&nbsp;)你提到过.Net,但没有说明你是用C / C ++还是用C#编程。如果您使用C#进行编程,那么您应该知道C#支持#warning格式。
随时随地看视频慕课网APP
我要回答