6

我在一个项目中有一个面向公众的界面,最终将成为一个 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

4

3 回答 3

6

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

于 2018-07-16T08:47:53.467 回答
0

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

我想这是在不通过所有课程的情况下解决您的问题的唯一解决方案。

于 2018-07-16T07:52:07.473 回答
0

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

using JetBrains.Annotations;

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

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

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

于 2021-09-02T10:19:13.867 回答