为什么 UnusedMember.Global 忽略某些 public/internal 属性?

Why is UnusedMember.Global ignoring certain public/internal properties?

正如我们所知,当R#发现不直接使用的类型或成员时,它会将其显示为灰色。当我们写 new class 时,所有字段最初都是灰色的,这是正常的。这是由于 UnusedMember.Global 规则。除了,它不适用于少数名字...

如果 type/member 的名称来自某个已定义的集合,则此规则不会将其标记为无效,并以某种方式决定它实际被使用,即使 class 中没有方法,并且class 本身没有在任何地方使用(但它只适用于 publicinternalprivate 按预期工作)。成员的类型似乎并不重要。大小写似乎也不重要。

我发现这样的词是:IdGuidSystemConfigurationConfigurationsName , Names, Service, Services, var 和所有指向 class/struct 的关键字,如果不是全部小写(所以 INTObjectString 等)及其复数形式(这些可以是小写的,所以 ints)

所以让我们来看看这个 class:

internal class ConfiguredService // Grayed out
{
    internal string RemoteSystem { get; } // Grayed out
    internal string LocalSystem { get; } // Grayed out
    internal string Configuration { get; } // Not grayed
    internal string ints { get; } // Not grayed
}

在我看来它不像是一个错误,它会在几年前被捕获,因为它非常明显且难以重现。但是我找不到任何来源可以解释为什么它是这样设计的,也无法列出采取这种行为的词。

我的Visual Studio版本是Professional 2017 15.8.5,R#是2018.1.2版本

看起来您 "solution wide analysis" (SWA) 已关闭并且 "show unused non-private type members when solution-wide analysis is off" 为 "on"(您可以在菜单 ReSharper -> 选项 -> 中打开 on/off 这两个功能代码检查 -> 设置)。 当 SWA 关闭时,非私有使用分析在轻量级模式下工作:它查找包含类型成员名称作为文本的文件,如果文件不多,则查找实际使用情况。但是,如果有很多具有所需名称的文件,则它不会检查实际用法并将类型成员视为 "used"。这种启发式方法会导致 typememberы 上出现您提到的流行名称的误报,但允许 ReSharper 的守护进程运行得更快。启用 SWA 使用分析更加精确,不应包含任何漏报