【问题标题】:Making a third-party method [Obsolete]制作第三方方法 [已过时]
【发布时间】:2016-01-27 15:25:18
【问题描述】:

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

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

我最好寻找一种“开箱即用”的解决方案,它不需要编写自己的构建后脚本来手动解析代码。

【问题讨论】:

  • 没有开箱即用的东西。 resharper 有代码注释。我猜你可以用 roslyn 做点什么。
  • 听起来更像是您需要使用自定义规则进行代码检查。决定其他东西是否已过时并不是真正由您决定,但您可以决定是否不想调用它。
  • 使用 Visual Studio 2015,您可以相当轻松快速地编写代码分析器,并将某些方法标记为“不推荐”,并在编译时抛出警告或错误。见:msdn.microsoft.com/en-us/magazine/dn879356.aspx
  • @JamesThorpe 好吧,它在我们的项目中已经过时了,但是是的,它最终是关于不在我们的代码中调用它。 “代码检查”是一个很好的关键字。我最终可能会为 ReSharper 编写自定义代码检查规则...
  • 不能对静态类型做很多事情,但对于其他人,您可以继承并使用 new 关键字来隐藏基本实现。有时这是一个不错的选择。

标签: c# .net visual-studio deprecated obsolete


【解决方案1】:

使用 Visual Studio 2015,您可以创建实时代码分析器,为几乎所有内容提供自定义设计时检查。 here 提供了一个很好的教程。这些通常作为解决方案的一部分存在,因此无论在何处编译,它们都会“跟随它”。

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

以前版本的 Visual Studio (2010+) 存在 similar feature。它没有很好地集成,但可能对您有用。

【讨论】:

  • 不错。可悲的是,我目前坚持使用 VS 2013,但这个答案可能对其他人有所帮助。
  • 我相信你可以为早期版本的 VS 创建类似的东西,但它们只在编译时运行。不要给你同样的实时反馈。现在正在尝试为您查找更多信息。
【解决方案2】:

ReSharper 用户的另一个选择:ExternalAnnotations

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

  1. 在目标项目的*.csproj旁边创建ExternalAnnotations文件夹。
  2. 在文件夹内创建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>
    
  3. 重新加载解决方案。

【讨论】:

    【解决方案3】:

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

    转到 ReSharper / 选项 / 代码检查 / 自定义模式 / 添加模式,编写与已弃用的方法调用匹配的模式并选择检查严重性,例如“建议”或“警告”。你也可以编写一个替换模式,可以通过快速修复来应用。

    示例

    在此示例中,System.Console 被误用于日志记录,应替换为适当的 log4net 调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多