因此,理想情况下,我希望得到引用了
ObsoleteAttribute
成员时获得的删除线效果,但不出现相应的编译器警告/错误(因为打开它会从所有不打算很快解决的旧版本A的使用中发出数百个错误)。这样,如果开发人员编写了一个使用A的新行,则立即会注意到删除线并修复代码以使用B。是否有办法在Visual Studio(2012)中获得这种功能?
编辑:
- 已经有几篇评论指出“无法区分新旧代码”。我同意。但这不是我所要求的,所以让我澄清一下:相反,我希望获得代码“过时”的视觉表示(例如删除线),而不会出现相应的编译器警告或错误。这样,在阅读旧代码或编写新代码的过程中,开发人员将立即获得某些内容已过时的视觉指示。即使在.NET中无法本地支持此功能,也可能有一个用于此目的的VS扩展?有一些评论认为“你既不能警告,也不能不警告”。我认为我在上面已经解释了使用案例,但我会再试一次。我们有一组核心库在各种解决方案中广泛使用。有时,我会更新其中的一个库以提供执行某些任务的新API。为了保持向后兼容性,在许多情况下,我不能简单地删除旧的执行该任务的方式,因为大量现有的代码依赖于使用旧的API集,并且不能轻易地重构为使用新的API。此外,没有迫切的理由这样做;它只会增加现有代码中的BUG风险。然而,我希望有一种方式可以直观地提醒开发人员,某些API应该避免使用,而选择其他API。这很困难,因为开发人员往往通过阅读已完成相同任务的现有代码来学习如何完成某项任务。这使得新API很难传播,因为旧的根深蒂固的API被大量现有代码所引用。
ObsoleteAttribute
通过编译器警告实现了这一点,但是那些警告只会从旧API的数百个现有用途中创建大量噪音。这就是为什么我喜欢删除线:它是非常直观的,但它只会干扰开发人员在阅读或编写使用过时API的代码时。以下是一些更改示例,我想标记旧API:
- 我们引入了一个新的运行SQL查询的API,这个API比以前的API更简洁、更灵活。很难彻底删除旧的API,因为它有许多奇怪的行为可能被依赖。然而,对于未来的开发,我希望推动人们使用新的API。
- 我们有两组内部单元测试辅助API。旧的API完全可用,但它依赖于继承,而且不太灵活。新的API使用属性构建,更灵活。数百个旧测试仍然使用旧的API,但我希望推动编写新测试的作者使用新的API。
- 我们的核心库中存在一些陈旧的随机遗留代码,这些代码并不真正适合使用,但此时将其删除却很困难。我希望限制向这些类型和方法添加新引用,这样随着现有依赖于它们的代码因为正常更替而消失,可能会变得划算将其删除。
另外,我认为这个问题的答案很好地描述了为什么即使不建议在新代码中使用某些内容,也可能不会将其标记为过时。
有几个评论/回答仅仅指出了ObsoleteAttribute
的存在。请注意,这个问题的文字一直都提到了这个属性。
ObsoleteAttribute
只在新代码中起作用,我不认为编译器能够做到这一点,我的意思是:在编译时所有代码的年龄都是相同的! - ichramm