从未使用过 Resharper 方法

Resharper Method is never used

我在一个项目中有一个面向 public 的界面,它最终将成为一个 nuget 包。这是代码:

public interface MyInterface
{
    void MyMethod();
}

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

的警告

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

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

选项 1:[UsedImplicitly] 我 class 中的每个方法。在我看来,这太乏味了。 选项 2:[SuppressMessage("ReSharper", "UnusedMember.Global")] 不那么乏味,但仍然必须在每个 class.

上执行

一定有更好的方法吗?

我还在某处读到只有选中 Enable solution-wide analysis 时才会发生这种情况。就我而言不是。我在 Reshaper Options > Code Inspection > Settings

下找到了这个设置

解决方案 #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 选项中禁用此类消息,取消选中代码检查 -> 编译器警告 -> 从不使用字段。

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

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

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

using JetBrains.Annotations;

[PublicAPI]
public interface MyInterface
{
    void MyMethod();
}

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

它也比 [UsedImplicitly] 有优势,因为它是对 class 应该由图书馆的消费者使用的意图的积极声明。相反,[UsedImplicitly] 会向我表明 method/class 以某种方式(例如 de/serialization)与当前解决方案的上下文一起使用。