首页 > 解决方案 > 为什么 UnusedMember.Global 忽略某些公共/内部属性?

问题描述

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

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

我发现表现出这样的词是:Id, Guid, System, Configuration, Configurations, Name, Names, Service,以及所有仅指向类/结构的关键字,如果以其他方式而不是所有小写字母(so Services,等)及其复数形式(这些可以是小写,所以)varINTObjectStringints

所以让我们上这门课:

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版本

标签: c#visual-studioresharper

解决方案


看起来您已关闭“解决方案范围分析”(SWA)并且“在解决方案范围分析关闭时显示未使用的非私有类型成员”为“打开”(您可以在菜单 ReSharper -> 选项中打开/关闭这两个功能-> 代码检查 -> 设置)。当 SWA 在轻量级模式下对非私有工作进行使用分析时:它会查找包含类型成员名称作为文本的文件,如果文件不多,则查找实际使用情况。但是,如果有很多具有所需名称的文件,则它不会检查实际用法并将类型成员视为“已使用”。这种启发式方法会在 typememberы 上使用您提到的流行名称导致误报,但允许 ReSharper 的守护进程更快地工作。启用 SWA 使用分析更精确,不应包含任何误报


推荐阅读