ReSharper 2025.2 Help

CleanupCode 命令行工具

CleanupCode 是一个 免费跨平台的命令行工具,可以在项目或解决方案中执行 代码清理 (修复格式、应用语法样式、删除冗余等),以确保代码库的一致性。

它还可以重新格式化指定的一组 .NET 源文件,即使没有解决方案或项目。

运行 CleanupCode

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

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

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

  3. 如果您打算清理一个解决方案并将解决方案文件用作参数,请确保在运行工具之前使用正确的构建配置构建该解决方案。

  4. 运行以下命令:

    cleanupcode.exe YourSolution.sln

    清理整个解决方案,或

    cleanupcode.exe File1 File2 File3 ...

    清理一个或多个 .NET 文件,或

    cleanupcode.exe <FileMaskForTargetFiles>

    清理与文件掩码匹配的一组 .NET 文件。

  5. 或者,您可以安装 ReSharper 命令行工具作为 .NET 工具 ,并使用 jb 命令运行 CleanupCode。

使用 DotSettings 配置 CleanupCode

如果您之前使用 ReSharper 处理过目标解决方案,可能已经配置了代码样式设置。 如果是这样,CleanupCode 将在 .DotSettings 文件中找到您的 自定义设置并应用它们。

CleanupCode 将从 DotSettings 文件中读取以下首选项:

  • 代码格式规则ReSharper | 选项 | 代码编辑 | 常规格式化样式ReSharper | 选项 | 代码编辑 | [语言] | 格式化样式

  • 语法样式ReSharper | 选项 | 代码编辑 | [语言] | 语法样式

  • C# 和 C++ 的文件头样式ReSharper | 选项 | 代码编辑 | 文件头文本

  • C# 的文件和类型布局ReSharper | 选项 | 代码编辑 | C# | 文件布局

  • 目标语言(ReSharper | 选项 | 环境 | 产品与功能

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

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

使用 EditorConfig 和 Clang-Format 配置 CleanupCode

您还可以通过 EditorConfig为所有语言以及 Clang-Format为 C++、JavaScript 和 TypeScript 配置代码样式设置。 这些设置可以存储在 .editorconfig .clang-format _clang-format 文件中,位于解决方案层次结构的不同级别。 这些文件通常放在 VCS 下,以便项目团队共享其中定义的设置。

ReSharper 允许您使用 EditorConfig 定义其 选项 对话框中可用的任何代码样式首选项。 您可以在 EditorConfig 参考中找到支持的 EditorConfig 属性的名称和描述。

至于 Clang-Format,ReSharper 只会应用 支持的 Clang-Format 选项

需要注意的是,在 .editorconfig 文件中定义的任何代码样式属性都将覆盖 ReSharper 设置中定义的相同属性,适用于此 .editorconfig 文件的范围。 在 Clang-Format 中定义的格式化属性将覆盖 ReSharper 设置和 EditorConfig 设置。

使用命令行参数配置 CleanupCode

清理参数

  • --profile — 列出要执行的清理任务的代码清理配置文件。

    默认情况下,CleanupCode 将应用 内置:完全清理配置文件中指定的代码清理任务,即所有 可用的清理任务 ,除了 更新文件头

    还有两个内置配置文件 — 内置:重新格式化代码 ,仅应用 代码格式首选项 ,以及 内置:重新格式化并应用语法样式 ,应用 代码格式首选项代码语法样式

    要使用这些配置文件之一或任何 自定义配置文件 ,请通过 --profile 参数传递配置文件名称,例如: --profile="Built-in: Reformat Code" YourSolution.sln

  • --include/--exclude — 定义清理期间要包含/排除的文件的文件掩码。 如果 --include--exclude 都已定义并覆盖相同的文件集, --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 参数。

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

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

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

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

  • --toolset-path — 使用此选项指定 MSBuild 的确切路径。 如果您有自定义的 MSBuild 安装并希望与 CleanupCode 一起使用,这可能会有所帮助,例如: --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,CleanupCode 将优先选择 6.0.302(最新版本,包括预览版本)。 现在,如果您希望使用 .NET SDK 5.0.100 运行 CleanupCode,请在命令行中添加 --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"

辅助参数

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

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

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

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

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

  • --caches-home — 允许您指定 CleanupCode 缓存数据的自定义位置。 默认情况下,使用 %LOCALAPPDATA% 目录,除非存在设置文件,在这种情况下使用指定的目录。 此参数在您希望使用快速 SSD 磁盘作为缓存或希望将所有构建处理数据存储在一个位置时非常有用。

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

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

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

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

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

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

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

  • --measure — 一个诊断选项,如果您在特定硬件和目标解决方案上运行工具时遇到性能问题,可以帮助您。 使用此选项和以下参数之一 [sampling、timeline(仅限 Windows)、memory] 定义分析类型,例如:

    CleanupCode.exe YourSolution.sln --measure=timeline

    执行完成后,CleanupCode 会创建一个执行快照并显示快照文件的路径。 您可以使用 JetBrains 工具研究快照:

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

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

控制 ReSharper 设置的参数

  • --settings — 默认情况下,CleanupCode 会使用 “解决方案团队共享”层 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

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

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

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

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

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

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

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

CleanupCode 还使用 MSBuild 来解析引用的项目和程序集中的符号。 有两个项目属性允许根据环境使用不同的引用: PlatformConfiguration。 如果运行 CleanupCode 的环境与项目最后一次构建的环境不同,您可能会收到类似 无法解析引用 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 参数显式指定目标平台和配置: --properties:Platform=x64;Configuration=Debug

支持的语言

CleanupCode 支持以下语言:

语言:C#

语言:VB.NET

语言:C++

语言:ASP.NET

语言:Razor

语言:XAML

语言:Resx

语言:构建脚本

语言:SQL

此功能在 C# 中可用

此功能在 Visual Basic 中可用

此功能在 C++ 中可用

此功能在 ASP.NET 中可用

此功能在 Razor 中可用

此功能在 XAML 中可用

此功能在资源文件中不可用

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

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

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