JetBrains Rider 2025.1 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 选项来抑制该警告。

在大多数情况下,建议保留默认行为或使用 --构建 选项,因为即使您的 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 — 使用此选项将所有现有的 代码检查转储到 输出中。 此选项应单独使用,而不是与实际分析一起使用,即不带解决方案参数。

  • --build/--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-only) | 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)——禁用指定的 设置层。 接受的值: GlobalAll、 GlobalPerProduct、 SolutionShared、 SolutionPersonal

  • --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 出现类似 The current .NET SDK does not support targeting .NET Core 3.0. 或 The SDK 'Microsoft.NET.Sdk' specified could not be found. 的错误,您需要使用额外的 参数指定正确的 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 的环境与项目上次构建的环境不同,您可能会收到类似 Can't resolve reference XXX: Reference wasn't resolved by MsBuild 或 Could not resolve this reference. Could not locate the assembly "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 在以下语言中查找代码问题:

Language: C#

语言:VB.NET

语言:ASP.NET

语言:Razor

语言:XAML

语言:Resx

语言:构建脚本

语言:SQL

功能在 C# 中可用

功能在 Visual Basic 中可用

功能在 C++ 中可用

功能在 ASP.NET 中可用

功能在 Razor 中可用

功能在 XAML 中可用

功能在资源文件中可用

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

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

2026年 4月 15日