我正在使用该Obsolete
属性(正如其他程序员建议的那样)在使用某种方法时显示警告.
有没有办法SuppressMessage
在使用合理的地方抑制类似于CodeAnalysis的警告?
谢谢!
编辑
这是[Obsolete("Some message")]
因为我需要包含有关警告的一些细节.但是,#pragma warning disable 612
一旦我将消息添加到裸[Obsolete]
属性,它就不再起作用了......
编辑2
找到正确的警告编号 - 如果您在过时属性后面有消息,则为618.
所以要做我想做的事:
#pragma warning disable 618
然后打电话
#pragma warning restore 618
感谢Jared Par和Jon Skeet为我指明正确的方向!
我经常遇到一种情况,我想阻止其他开发人员继续使用方法或类.例如,假设我有两个库方法"A"和"B",其中"A"是执行某项任务的"旧"方式,"B"是执行该任务的"新"方式.在许多情况下,A和B完全不同,使用A来重构代码开始使用B非平凡(例如需要流过附加状态).由于A适用于使用它的情况,我不想优先考虑重构.但是,我确实希望给我的开发人员一个直观的指示,即A不会在新代码中使用.
因此,我理想地喜欢在引用具有ObsoleteAttribute
WITHOUT相关编译器警告/错误的成员时获得的删除(因为启用它会从A的所有旧用途中发出数百个错误,我们不打算随时解决).这样,如果开发人员用A编写新的代码行,他或她将立即注意到删除并修复代码以使用B.
有没有办法在VisualStudio(2012)中获得此类功能?
编辑:
对"无法区分新旧代码"的效果有几点评论.我同意.但是,这不是我要求的,所以让我澄清一下:相反,我想要的是代码"过时"(例如删除线)的直观表示,没有相应的编译器警告或错误.这样,开发人员在阅读旧代码或编写新代码的过程中,会立即看到某些内容已过时.即使.NET本身不支持这种情况,也许为此目的有一个VS扩展吗?
对于"你不能既有警告也没有警告"的效果,有几条评论.我以为我解释了上面的用例,但我会再试一次.我们有一组核心库,在构成我们代码库的各种解决方案中大量使用.有时,我会对其中一个库进行更新,这些库提供了一个新的,更好的API来执行某些任务.为了保持向后兼容性,我不能只删除执行该任务的旧方法(在许多情况下),因为大量现有代码依赖于使用旧的API集,并且不能轻易地重构以使用新的API.此外,没有迫切的理由这样做; 它只会冒险将bug引入现有代码.但是,我想通过某种方式在视觉上提醒开发人员注意某些API应该避免使用其他API.这很困难,因为开发人员倾向于通过阅读完成相同任务的现有代码来学习如何完成某项任务.这使得新的API难以传播,因为旧的根深蒂固的API被如此多的现有代码引用.在ObsoleteAttribute
通过编译器警告实现这一点,但这些警告将刚刚从数百旧的API的现有用途的创建吨的噪音.这就是我喜欢删除线的原因:它是非常直观的,但只有在开发人员阅读或编写使用过时API的代码时才会干扰开发人员.以下是我想标记旧API的一些更改示例:
作为进一步的说明,我认为这个问题的答案很好地描述了为什么你可能不会标记过时的东西,即使你不建议在新代码中使用它.
有几条评论/答案只是简单地说出了存在ObsoleteAttribute
.请注意,此问题的文本始终引用该属性.
我用:
[Obsolete("Use AnotherMethod() insted.", false)]
Run Code Online (Sandbox Code Playgroud)
第二个参数是false
但Visual Studio为每个过时的方法调用显示警告为错误,以防止编译项目.如何让VS将这些调用标记为警告而不是错误?
我正在使用另一个开发人员的项目,该项目有数百个过时的方法警告.在已编译的dll中,我设置了抑制警告618(完整警告编号为CS0618).
有没有办法在网站上设置相同的设置?
问题是有太多过时的警告,我找不到任何重要的警告.