【问题标题】:Resharper Method is never used从未使用过 Resharper 方法
【发布时间】:2018-12-23 11:10:02
【问题描述】:

我在一个项目中有一个面向公众的界面,最终将成为一个 nuget 包。代码如下:

public interface MyInterface
{
    void MyMethod();
}

现在这个接口中的每个方法都没有在这个库中使用,而是通过包在其他地方使用。但是,这里的每个方法都有Method x is never used.的警告

是否有一种简单的方法可以告诉 ReSharper 在我打开的每个解决方案中忽略每个项目中的每个公共方法,以便不在公共方法中执行此检查。

我有几种方法可以解决这个问题,但是太乏味了。

选项 1:[UsedImplicitly] 在我的班级中的每个方法上。在我看来,这太乏味了。 选项 2:[SuppressMessage("ReSharper", "UnusedMember.Global")] 不那么繁琐,但仍然需要在每个类上实现。

一定有更好的方法吗?

我还在某处读到只有在选中Enable solution-wide analysis 时才会发生这种情况。在我的情况下,它不是。我在Reshaper Options > Code Inspection > Settings下找到了这个设置

【问题讨论】:

  • 添加一个测试项目,你知道,测试方法!
  • [PublicAPI] 会将整个类型标记为隐式使用。我认为它应该优于[UsedImplicitly]。这更适合反射使用。

标签: c# resharper resharper-10.0


【解决方案1】:

在您的情况下,由于您提到 SWEA 已禁用,我建议禁用以下复选框 ReSharper | Options | Code Inspection | Settings | General | Show unused non-private type members when solution-wide analysis is off

【讨论】:

  • 该选项对我来说不存在。搬家了吗?
  • 此选项已添加到 ReSharper 2018.1 版本。你用的是什么版本?
  • 最新,有趣的是,该选项现在在那里。我想知道我以前是怎么错过的。我真的很小心。无论如何,这确实解决了问题。
【解决方案2】:

解决方案 #1

你可以使用

 // ReSharper disable UnusedMember.Global

如果你把它放在方法之前,你会禁用该方法的警告...

public interface IMyInterface
{
    // ReSharper disable once UnusedMember.Global
    void MyMethod();
}

如果将它放在命名空间声明之前,则会禁用整个文件的警告。

否则你可以这样做,所以你禁用接口的警告:

[SuppressMessage("ReSharper", "UnusedMember.Global")]
public interface IMyInterface
{
    void MyMethod();
}

解决方案 #2

您可以采取的最后一个解决方案是在 Resharper 选项中禁用此类消息,取消选中代码检查 -> 编译器警告 -> 从不使用字段。

我想这是唯一解决您的问题而无需通过所有类的解决方案。

【讨论】:

    【解决方案3】:

    取自 @Matthias 对原始问题的评论,对于有意从库中导出的公共方法,请在 JetBrains.Annotations 包和命名空间中的类上使用 [PublicAPI] 属性:

    using JetBrains.Annotations;
    
    [PublicAPI]
    public interface MyInterface
    {
        void MyMethod();
    }
    

    这不是原始问题的理想答案,因为它与将[UsedImplicitly] 应用于每个班级一样乏味。但是,对我来说,它比全面禁用检查更有优势,因为它会指出我在公开方法或类时出错的地方。

    [UsedImplicitly] 相比,它也有一个优势,因为它是一个积极的声明,即这个类应该被图书馆的消费者使用。相比之下,[UsedImplicitly] 会向我表明该方法/类在当前解决方案的上下文中以某种方式使用(例如反序列化)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-30
      • 2016-03-29
      • 2014-01-03
      相关资源
      最近更新 更多