JetBrains Rider 2025.2 Help

InspectCode 命令行工具

JetBrains Rider 的一个最显著的功能——代码检查——即使在不打开 IDE 的情况下也可用。 InspectCode 是一个 免费跨平台的命令行工具,至少需要一个参数——您的解决方案文件——以应用 JetBrains Rider 的所有检查。

运行 InspectCode

  1. 下载 ReSharper 命令行工具。 使用下载按钮旁的选择器选择您的操作系统。

  2. 在任意目录中解压命令行工具包。

    确保下载的 .zip 文件在解压前已“解除阻止”:右键单击文件,选择 属性 并单击 解除封锁。 如果未执行此操作,.NET 框架将以部分信任模式加载应用程序,这意味着它将无法正确加载或运行。

  3. 请运行以下命令:

    InspectCode.exe YourSolution.sln -o=<PathToOutputFile>
  4. 或者,您可以将 ReSharper 命令行工具作为 .NET 工具安装 ,并使用 jb 命令运行 InspectCode。

默认输出格式

当 InspectCode 完成分析后,它会将结果保存为静态分析结果交换格式 (SARIF)。 输出的 .json 文件在命令提示符 -o=<PathToOutputFile> 中指定。 此文件包含在指定范围内(整个解决方案或特定项目)发现的所有代码问题。

如何处理输出结果取决于您。 但这里有一些推荐的后续步骤:将输出转换为 HTML 报告,或根据检测到的问题数量和类型在您的持续集成 (CI) 服务器上生成一些消息。

备用输出格式

InspectCode 还可以创建其他格式的输出文件,例如纯文本、XML 和 HTML。 要更改输出格式,请在命令行中添加 --format (-f) 参数,例如:

InspectCode.exe [YourSolution.sln] -f="xml" -o="CodeIssues.xml"

XML 输出格式结构

XML 包含两个部分:

  • 发现的问题类型列表,其中每种类型对应于特定的检查,并具有以下属性:

    • ID — 允许将每个问题链接到相应的检查。

    • 类别 — 可用于按 类别对类似问题进行分组。

    • SubCategory — 如果某些问题类型具有相同的 SubCategory 属性,则表示这些问题是相同的,但出现在不同的语言或范围中。 您可以使用它进行进一步分组。

    • 描述 — 描述问题。

    • 严重性 — 显示检查的 严重级别

    • WikiUrl — 链接到相应的 代码检查索引 条目(如果有)。

    • 全局 — 通知 解决方案范围的代码检查

  • 按项目分组的发现问题列表,其中每个问题具有以下属性:

    • TypeId — 允许将每个问题链接到相应的检查(报告第一部分中的 IssueType)。

    • 文件 — 受影响文件的路径,相对于解决方案。

    • 偏移量 — 从文件开头到问题代码开头和结尾的符号偏移范围。

    • 折线图 — 包含问题代码的行。

    • 消息 — 问题的简短描述。

    • 严重性 — 仅当问题的 严重级别与相应检查的严重级别不同步时才会出现此属性。 如果解决方案中的某些项目启用了“将警告视为错误”选项,而其他项目未启用,则可能会出现这种情况——在这种情况下,某些问题的严重级别将为“错误”,与原始的“警告”严重级别不同。

使用场景

现在让我们看看如何使用该工具以及如何处理其输出。 在本地机器上运行它可能会有所帮助,但仅当您没有 JetBrains Rider 时,因为使用 JetBrains Rider,您可以通过几次点击 获取选定范围的检查结果

更有前景的情况是,在 CI 服务器上使用 InspectCode,您可以将其集成到构建脚本中,并将代码检查结果添加到构建报告和消息中。

JetBrains TeamCity 创建了以下由 InspectCode 检测到的代码问题的可视化展示:

在 JetBrains TeamCity Web 界面中代码问题的可视化展示

有关更多信息,请参阅 TeamCity 文档下载最新版本的 TeamCity进行试用。

分析前构建解决方案

默认情况下,InspectCode 在开始分析之前 恢复 NuGet 包并构建目标解决方案。 这使得工具始终拥有正确的解决方案模型,并且仅发现相关的代码问题。

您将在输出中看到有关此的警告,可以通过明确指定 --build--no-build 选项来抑制该警告。

在大多数情况下,建议保留默认行为或使用 --build 选项,因为即使您的 CI 链中已经包含在运行 InspectCode 之前的构建步骤,MSBuild 也会非常快速地处理最近构建的解决方案。

除此之外,还有一些场景需要 InspectCode 的构建以进行正确的分析。 例如,如果您的解决方案中有源生成器,InspectCode 将使用其自己的逻辑将生成的文件转储到磁盘。

然而,也有一些情况(例如 C++ 项目),不必要的构建可能会带来不必要的开销。 在这种情况下,请使用 --no-build 选项使 InspectCode 跳过构建。

使用 DotSettings 配置 InspectCode

如果您之前使用 JetBrains Rider 处理过目标解决方案,您可能已经 配置了代码检查设置。 如果是这样,InspectCode 将在 .DotSettings 文件中找到您的 自定义设置并应用它们。 如果没有设置文件,则所有检查将使用默认的严重级别。 除了代码检查的自定义严重级别外,InspectCode 还会在 .DotSettings 文件中查找以下设置:

如果您想在 CI 服务器上配置 InspectCode,您可以使用 JetBrains Rider 在本地完成所有配置, 将设置保存到解决方案团队共享层 ,然后将生成的 YourSolution.sln.DotSettings 文件提交到您的 VCS 中的解决方案目录。 服务器上的 InspectCode 将找到并应用这些设置。

或者,您可以通过 --设置 参数指定共享 .DotSettings 文件的路径(如果有,将覆盖其他设置文件中的设置)。

默认情况下,InspectCode 还会在目标解决方案上运行 Roslyn 分析器。 如果您想禁用 Roslyn 分析器,有两种方法可以实现:

  • 使用 --属性 参数,例如:

    InspectCode.exe YourSolution.sln -o=<PathToOutputFile> --properties=RunAnalyzers=false
  • 在解决方案的 .DotSettings 文件中,例如:

    <wpf:ResourceDictionary xml:space="preserve" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:s="clr-namespace:System;assembly=mscorlib" xmlns:ss="urn:shemas-jetbrains-com:settings-storage-xaml" xmlns:wpf="http://schemas.microsoft.com/winfx/2006/xaml/presentation"> <!-- Enable/disable Roslyn analyzers and Source Generators --> <s:Boolean x:Key="/Default/CodeInspection/Roslyn/RoslynEnabled/@EntryValue">False</s:Boolean> <!-- Include/exclude Roslyn analyzers in Solution-Wide Analysis --> <s:Boolean x:Key="/Default/CodeInspection/Roslyn/UseRoslynInSwea/@EntryValue">False</s:Boolean> </wpf:ResourceDictionary>

使用 EditorConfig 配置代码检查

如果您 使用 EditorConfig 来维护项目的代码样式,您还可以从 .editorconfig 文件中配置代码检查。

根据 EditorConfig 约定,JetBrains Rider 将应用定义在当前文件目录及其所有父目录中的名为 .editorconfig 的文件中的检查设置,直到到达根文件路径或找到带有 root=true 的 EditorConfig 文件。 在 .editorconfig 文件中指定的文件掩码,例如 *Test.cs ,也会被考虑在内。

.editorconfig 文件中的检查设置与其他属性的配置方式类似——通过添加相应的行:

[inspection_property]=[error | warning | suggestion | hint | none]

例如,您可以通过以下行将 可能的 'System.NullReferenceException' 检查的 严重性级别更改为 错误

resharper_possible_null_reference_exception_highlighting=error

或者,您可以通过以下行禁用 具有默认值的冗余参数检查:

resharper_redundant_argument_default_value_highlighting=none

您可以在 代码检查索引 部分的页面以及 EditorConfig 属性索引 页面上找到每个检查的 EditorConfig 属性。 — 只需使用浏览器搜索找到所需检查的属性。

使用命令行参数配置 InspectCode

我们已经在上文提到了一些可选参数。 以下是命令行参数的完整列表(您可以通过键入 InspectCode.exe --help 列出它们):

检查参数

  • --项目 — 允许分析特定项目,而不是整个解决方案。 在此参数之后,您可以输入项目名称或与解决方案中多个项目匹配的通配符。 例如, --project=*Billing

  • --include/--exclude — 定义在检查报告中包含/排除哪些文件的文件掩码。 如果 --包含--排除 都已定义并覆盖相同的文件集,则 --排除 将具有更高优先级。

    您可以在文件掩码中使用 Ant 风格通配符

    • ? 匹配单个字符(不包括目录分隔符)

    • * 匹配零个或多个字符(不包括目录分隔符)

    • ** 匹配任意数量的字符(包括目录分隔符)

    • /\ 匹配目录分隔符,无论操作系统路径格式如何

    例如,模式 **Test?\**.* 将匹配以下文件:

    • C:\Projects\MyTestX\data\file_one.txt

    • /home/projects/TestY/file_two.xml

    但不包括:

    • C:\Projects\Test\data\file_one.txt

    • /home/projects/TestY/file_two

    要指定多个路径或通配符,请用分号 ; 分隔它们,或多次使用 --include/--exclude 参数。

  • --swea--no-swea — 这些参数允许您显式启用或禁用 解决方案范围分析。 否则,解决方案范围的分析将根据现有设置启用或禁用。

  • --severity (-e) — 默认情况下,InspectCode 仅报告 建议及更高严重级别的问题。 此参数允许您将最小报告的严重级别更改为 [INFO,HINT,SUGGESTION,WARNING,ERROR]。 例如, -e=WARNING

  • --dumpIssuesTypes-it — 使用此选项将所有现有的 代码检查转储到 输出中。 此选项应单独使用,而不是与实际分析一起使用,即不带解决方案参数。

  • --构建/--no-build — 允许您指定是否 在开始分析之前构建目标解决方案。 默认情况下,InspectCode 始终构建解决方案。

  • --目标 — 允许您指定在开始分析之前要执行的 MSBuild 目标。 您可以指定任何目标,但必须在目标解决方案的所有 .csproj 文件中定义。 默认情况下,执行 构建 目标。

    如果未构建解决方案,即指定了 --no-build 参数,则 --目标 参数将不起作用。

  • --属性——允许您覆盖 MSBuild 属性。 您可以单独设置每个属性(--properties:prop1=val1--properties:prop2=val2 ),或使用分号分隔多个属性 --properties:prop1=val1;prop2=val2

    请注意,分号不能用于值内部,例如: --properties:ReferencePath="r:\reference1\;r:\reference2\"。 在这种情况下,请使用另一个 --属性 参数分别添加每个值——这些值将被组合。

    指定的属性将应用于所有分析的项目。 目前,没有直接的方法仅为特定项目设置属性。 解决方法是在此项目中创建一个自定义属性,并将其分配给所需的属性,然后在 InspectCode 参数中使用该自定义属性。

  • --工具集——使用此选项指定确切的 MSBuild 版本。 例如 12.0: --toolset=12.0 默认情况下,使用可用的最高 MSBuild 版本。 如果您有多个相同版本的安装,例如来自 Visual Studio 2019 的 16.0 和来自 .NET Core 3.x 的 16.0,此选项可能不起作用。

  • --toolset-path——使用此选项指定 MSBuild 的确切路径。 如果您有自定义的 MSBuild 安装并希望将其与 InspectCode 一起使用,这可能会有所帮助,例如: --toolset-path="c:\tools\msbuild\bin\MsBuild.exe"

  • --dotnetcore——默认情况下,.NET 安装是自动检测的。 如果自动检测导致冲突,您可以使用此选项指向特定的 .NET 安装。 使用时不带参数以忽略 .NET Core。 示例: --dotnetcore=/usr/local/share/dotnet/dotnet

  • --dotnetcoresdk——使用此选项指定应提供 MSBuild 的 .NET SDK 版本。 例如,如果您安装了带有 SDK 5.0.100 和 6.0.302 的 .NET,InspectCode 将优先选择 6.0.302(最新版本,包括预览版本)。 现在,如果您想使用 .NET SDK 5.0.100 运行 InspectCode,请在命令行中添加 --dotnetcoresdk=5.0.100

  • --mono — 默认情况下,Mono 安装是自动检测的。 如果自动检测导致冲突,您可以使用此选项指向特定的 Mono 安装。 不带参数使用它以忽略 Mono。 示例: --mono=/Library/Frameworks/Mono.framework/Versions/Current/bin/mono

  • --targets-for-references — 自定义 MSBuild 目标的名称,这些目标将被执行以获取项目的引用程序集。 这些目标定义在项目文件或 .目标 文件中。 多个值用分号分隔。 例如, --targets-for-references="GetReferences"

  • --targets-for-items — 自定义 MSBuild 目标的名称,这些目标将被执行以获取项目的其他项(例如,Compile 项)。 这些目标定义在项目文件或 .目标 文件中。 多个值用分号分隔。 例如, --targets-for-items="GetCompileItems"

辅助参数

  • --输出-o — 允许您设置输出文件。

  • --format (-f) — 默认情况下,InspectCode 将其输出写入 SARIF 格式。 如果需要,您可以使用此参数 [Html,Text,Xml] 指定其他输出格式。 例如, -f=Text

    要在一次运行中生成多个输出工件,请指定用分号分隔的所需格式,例如: --format=Html;Xml ;或多次添加此参数,例如 --format=Html --format=Xml。 在生成多个工件时,您可以在 --输出 参数中指定一个目录,文件名将自动生成;或者您可以指定一个文件名,不同的文件扩展名将用于不同的工件。

  • --jobs (-j) — 默认情况下,InspectCode 使用启发式方法拆分其任务,并使用尽可能多的线程/核心并行运行。 如果需要,您可以限制线程数量,例如, -j=4

  • --absolute-paths (-a) — 默认情况下,InspectCode 报告中的文件路径是相对于解决方案文件的。 您可以使用此开关在报告中使用绝对路径。

  • --debug (-d) — 使用此选项将 InspectCode 的执行详细信息添加到输出中。 如果您在使用 InspectCode 时遇到问题,这些详细信息在联系 支持团队时会很有帮助。

  • --详细程度 — 默认情况下,InspectCode 仅在输出中显示错误消息。 使用此参数更改输出中写入信息的详细程度,以下是级别(从少到多): [OFF,FATAL,ERROR,WARN,INFO,VERBOSE,TRACE]

  • --LogLevel — 使用此参数控制写入日志文件的信息量,通过 --LogFile--LogFolder 指定。 以下是级别(从少到多详细): [OFF,FATAL,ERROR,WARN,INFO,VERBOSE,TRACE]

    例如,如果 InspectCode 出现问题,您可以联系 JetBrains Rider 支持并共享包含所有 TRACE 消息的日志文件: --LogLevel=TRACE

  • --LogFile — 使用此参数为 InspectCode 的消息指定日志文件的绝对路径。 如果您还需要 MSBuild 和 Roslyn 的日志,请改用 --LogFolder 参数。

  • --LogFolder — 使用此参数指定一个绝对路径到目录,其中应写入 InspectCode 的日志以及 MSBuild 和 Roslyn 的日志。 如果您只需要 InspectCode 的日志,请改用 --LogFile 参数。

  • --caches-home — 允许您为 InspectCode 缓存的数据指定自定义位置。 默认情况下,使用 %LOCALAPPDATA% 目录,除非有设置文件,在这种情况下使用其中指定的目录。 如果您希望为缓存使用快速 SSD 磁盘,或者希望将所有构建处理数据存储在一个地方,此参数可能会有所帮助。

  • --config-create--配置 — 这些选项允许您通过配置文件传递上述参数。 第一个选项将根据当前参数创建一个配置文件;第二个选项用于从该文件加载参数。

  • --eXtensions (-x) — 安装并启用指定的插件。

    插件通过其 ID 指定,您可以在 JetBrains Marketplace的插件页面上找到:找到所需的插件并滚动到 概览 选项卡的底部。

    例如, StyleCop by JetBrains 插件的插件 ID 是 StyleCop.StyleCop ,要使用此插件运行 InspectCode,您需要在命令行中添加 -x=StyleCop.StyleCop

    要指定多个插件,请用分号分隔它们的 ID。

  • --源 — 允许您指定一个自定义包源以安装插件,即包含插件的 .nupkg 文件所在的目录,例如 --source="C:\plugins"。 如果未指定任何内容,InspectCode 将在 JetBrains Marketplace中查找插件。

  • --测量——一个诊断选项,如果您在特定硬件上运行工具时遇到性能问题,可以帮助您。 使用此选项并结合以下参数之一 [sampling|timeline(仅限 Windows)|memory] 定义分析类型,例如:

    InspectCode.exe YourSolution.sln -o=<PathToOutputFile>

    执行完成后,除了问题报告文件外,InspectCode 还会创建一个执行快照并显示快照文件的路径。 您可以使用 JetBrains 工具研究快照:

  • --version (-v) — 使用此选项显示工具的当前版本并退出。

  • --no-updates — 默认情况下,InspectCode 在每次运行时检查更新。 使用此选项禁用更新检查。

控制 ReSharper 设置的参数

  • --设置 — 默认情况下,InspectCode 将使用 “解决方案团队共享”层 SolutionName.DotSettings 中的 ReSharper 设置覆盖其默认设置(如果存在)。 如果需要,您可以使用此参数指定另一个 .DotSettings 文件,该文件将覆盖所有其他设置。 例如,

    --settings="C:\Work\MyRsSettings.DotSettings"

  • --disable-settings-layers (-dsl) — 禁用指定的 设置层。 接受的值: GlobalAllGlobalPerProductSolutionSharedSolutionPersonal

  • --no-buildin-settings — 禁用全局、解决方案和项目设置层的设置。 等同于 --disable-settings-layers: GlobalAll,GlobalPerProduct,SolutionShared,SolutionPersonal,ProjectShared,ProjectPersonal

以下是使用一些命令行选项运行 InspectCode 的示例:

InspectCode.exe --project=Documents -o="C:\temp\Results.json" --no-swea -x=EtherealCode.ReSpeller "C:\Projects\ReSharper\resharper.sln"

MSBuild. 可能的问题和解决方案

当 InspectCode 接收到目标解决方案文件时,它需要创建一个要检查的文件列表并初始化一些属性,例如语言版本。 InspectCode 使用 MSBuild 从项目文件中获取此信息。

在大多数情况下,InspectCode 会自动找到适合目标解决方案的 MSBuild 可执行文件。 但可能会有一些问题阻止自动检测,例如解决方案运行时的版本与已安装的 .NET SDK 的版本不匹配。

如果 InspectCode 出现类似 .NET SDK 当前不支持以 .NET Core 3.0 为目标版本。找不到指定的 SDK“Microsoft.NET.Sdk”。 的错误,您需要使用额外的 参数指定正确的 SDK 或运行时。 如果您使用 .NET,MSBuild 已经安装在您的机器上,并且通常存在多个安装,因此您需要提供一个适合目标解决方案的版本。

在大多数情况下,您只需添加一个参数——--工具集--dotnetcore。 在复杂的情况下,例如机器上有许多不同的安装或使用自定义版本的 MSBuild,您可能需要其他参数: --toolset-path--mono--targets-for-references--targets-for-items

当您指定 --dotnetcore--dotnetcoresdk 时,InspectCode 将尝试使用来自 .NET SDK 的 MSBuild 并忽略其他版本。 例如,如果您的机器上有多个 MSBuild v 16.0 的安装,并通过 --dotnetcore 指定 .NET 安装路径,InspectCode 将使用来自指定安装的 .NET MSBuild。 当未指定 --dotnetcore 时,InspectCode 将查看解决方案目录,尝试找到 global.json ,并使用其中指定的 SDK 版本。 如果未找到任何内容,将使用最新可用的 SDK 版本。

项目引用。 可能的问题和解决方案

InspectCode 还使用 MSBuild 来解析引用的项目和程序集中的符号。 有两个项目属性允许根据环境使用不同的引用: 平台配置。 如果运行 InspectCode 的环境与项目上次构建的环境不同,您可能会收到类似 无法解析引用 XXX:MsBuild 未能完成引用解析无法解析此引用。找不到程序集“XXX” 找不到程序集“XXX” 的错误。

如果您收到此类错误,请检查输出以查看构建配置是否存在不匹配。 例如

..... JetBrains Inspect Code 2020.1 Running in 64-bit mode, .NET runtime 4.0.30319.42000 under Microsoft Windows NT 10.0.17134.0 Custom settings layer is mounted. Used file XXXXX.DotSettings Using toolset version 15.0 from "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin" Configuration: Debug, Platform: x86 .....

在上述内容中,您可以看到项目文件中指定的平台是 x86 ,但工具正在以 64 位模式运行。 要解决此问题,请使用 --属性 参数明确指定目标平台和配置: --properties:Platform=x64;Configuration=Debug

支持的语言

InspectCode 在以下语言中查找代码问题:

语言:C#

语言:VB.NET

语言:ASP.NET

语言:Razor

语言:XAML

语言:Resx

语言:构建脚本

语言:SQL

功能在 C# 中可用

功能在 Visual Basic 中可用

功能在 C++ 中可用

功能在 ASP.NET 中可用

功能在 Razor 中可用

功能在 XAML 中可用

功能在资源文件中可用

功能在构建脚本文件中可用

功能在 SQL/NoSQL 文件和注入中不可用

最后修改日期: 2025年 9月 26日