从未使用过 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)与当前解决方案的上下文一起使用。
我在一个项目中有一个面向 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)与当前解决方案的上下文一起使用。