C# 使第三方方法[过时]

C# 使第三方方法[过时],c#,.net,visual-studio,deprecated,obsolete,C#,.net,Visual Studio,Deprecated,Obsolete,如果我想在我的代码中将某个方法声明为已弃用/过时,我可以向其添加[过时]属性,并使编译器在使用该方法时发出警告(或错误) 对于第三方方法(如System.Console.WriteLine)是否可能达到类似效果?显然,我无法添加属性,因为我不控制代码。但在.NET或Visual Studio中可能还有其他一些技巧 我最好是寻找一个“开箱即用”的解决方案,它不需要像编写自己的生成后脚本那样手动解析代码。使用Visual Studio 2015,您可以创建实时代码分析器,可以为几乎任何东西提供自定义

如果我想在我的代码中将某个方法声明为已弃用/过时,我可以向其添加
[过时]
属性,并使编译器在使用该方法时发出警告(或错误)

对于第三方方法(如
System.Console.WriteLine
)是否可能达到类似效果?显然,我无法添加属性,因为我不控制代码。但在.NET或Visual Studio中可能还有其他一些技巧


我最好是寻找一个“开箱即用”的解决方案,它不需要像编写自己的生成后脚本那样手动解析代码。

使用Visual Studio 2015,您可以创建实时代码分析器,可以为几乎任何东西提供自定义设计时检查。一个好的教程是可用的。它们通常作为解决方案的一部分存在,因此无论在哪里编译,它们都将“跟踪”

代码分析器可以引发编译时错误或警告,甚至可以提供一个UI来自动更正问题。它们可能非常强大,但根据您的需要编写其中一个可能相当复杂


Visual Studio(2010+)的早期版本中存在一个。它的集成度不高,但可能适合您。

您可以通过在ReSharper中创建自定义代码检查规则来做到这一点

转到ReSharper/Options/Code-Inspection/Custom-Pattern/Add-Pattern,编写一个与不推荐的方法调用匹配的模式,并选择检查严重性,如“建议”或“警告”。您还可以编写一个可通过快速修复应用的替换模式

示例


在本例中,
System.Console
被错误地用于日志记录,应该由正确的log4net调用替换。

ReSharper用户的另一个选项:

下面是为Selenium的
WebDriver.dll添加注释的示例:

  • 在目标项目的
    *.csproj
    旁边创建
    ExternalAnnotations
    文件夹
  • 在文件夹内创建
    WebDriver.xml
    <?xml version="1.0" encoding="utf-8" ?> 
    <assembly name="WebDriver">
      <member name="M:OpenQA.Selenium.INavigation.GoToUrl(System.String)">
        <attribute ctor="M:System.ObsoleteAttribute.#ctor(System.String,System.Boolean)">
          <argument>Use different overload of this method.</argument>
          <argument>true</argument>
        </attribute>
      </member>
    
    
    使用此方法的不同重载。
    真的
    
  • 重新加载解决方案

  • 没有什么是现成的。resharper有代码注释。我猜你可以和roslyn一起做点什么。听起来你更需要使用自定义规则进行代码检查。决定其他东西是否过时实际上并不取决于您,但您可以决定是否不想调用它。使用Visual Studio 2015,您可以相当轻松快速地编写代码分析器,将某些方法标记为“不推荐”,并在编译时抛出警告或错误。请看:@JamesThorpe好吧,它在我们的项目中已经过时了,但是是的,它最终是关于不在我们的代码中调用它。“代码检查”是一个很好的关键词。我可能会为ReSharper编写一个自定义代码检查规则……对于静态类型我无能为力,但对于其他类型,您可以继承并使用new关键字隐藏基本实现。有时候这是个不错的选择。可悲的是,我目前一直在使用VS2013,但这个答案可能会帮助其他人。我相信您可以为早期版本的VS创建类似的东西,但它们只在编译时运行。他们不会给你同样的现场反馈。正在尝试为您查找更多信息。请检查以下内容: