CleanupCode 命令行工具
CleanupCode 是一个 免费跨平台的命令行工具,可以在项目或解决方案中执行 代码清理 (修复格式、应用语法样式、删除冗余等),以确保代码库的一致性。
它还可以重新格式化指定的一组 .NET 源文件,即使没有解决方案或项目。
运行 CleanupCode
下载 ReSharper 命令行工具。 使用下载按钮旁的选择器选择您的操作系统。
在任意目录中解压命令行工具包。
确保下载的 .zip 文件在解压前已“解除阻止”:右键单击文件,选择 属性 并单击 解除封锁。 如果未执行此操作,.NET 框架将以部分信任模式加载应用程序,这意味着它将无法正确加载或运行。
如果您打算清理一个解决方案并将解决方案文件用作参数,请确保在运行工具之前使用正确的构建配置构建该解决方案。
请运行以下命令:
cleanupcode.exe YourSolution.sln清理整个解决方案,或
cleanupcode.exe File1 File2 File3 ...清理一个或多个 .NET 文件,或
cleanupcode.exe <FileMaskForTargetFiles>清理与文件掩码匹配的一组 .NET 文件。
或者,您可以安装 ReSharper 命令行工具作为 .NET 工具 ,并使用
jb命令运行 CleanupCode。
使用 DotSettings 配置 CleanupCode
如果您之前使用 JetBrains Rider 处理过目标解决方案,您可能已经配置了代码样式设置。 如果是这样,CleanupCode 将在 .DotSettings 文件中找到您的 自定义设置并应用它们。
CleanupCode 将从 DotSettings 文件中读取以下首选项:
如果您想在 CI 服务器上配置 CleanupCode,可以在本地使用 JetBrains Rider 进行所有配置, 将设置保存到解决方案团队共享层 ,然后将生成的 YourSolution.sln.DotSettings 文件提交到 VCS 中的解决方案目录。 服务器上的 CleanupCode 将找到并应用这些设置。
作为替代,您可以通过 --设置 参数指定共享 .DotSettings 文件的路径(如果有,它将覆盖其他设置文件中的设置)。
使用 EditorConfig 配置 CleanupCode
您还可以通过 EditorConfig配置代码样式设置。 这些设置可以存储在解决方案层次结构不同级别的 .editorconfig 文件中。 这些文件通常放在 VCS 下,以便定义的设置在项目团队之间共享。
JetBrains Rider 允许您使用 EditorConfig 定义其代码样式首选项中的任何可用选项,这些选项可在 JetBrains Rider 的 设置 对话框中找到。 您可以在 EditorConfig 参考中找到支持的 EditorConfig 属性的名称和描述。
需要注意的是,在 .editorconfig 文件中定义的任何代码样式属性都将覆盖 JetBrains Rider 设置中定义的相同属性,适用于该 .editorconfig 文件的范围。
使用命令行参数配置 CleanupCode
清理参数
--个人资料— 列出要执行的清理任务的代码清理配置文件。默认情况下,CleanupCode 将应用 内置:完全清理配置文件中指定的代码清理任务,即所有 可用的清理任务 ,除了 更新文件头。
还有两个内置配置文件——内置:重新格式化代码 ,仅应用 代码格式首选项 ,以及 内置:重新格式化并应用语法样式 ,应用 代码格式首选项和 代码语法样式。
要使用这些配置文件之一或任何 自定义配置文件 ,请通过
--个人资料参数传递配置文件名称,例如:--profile="Built-in: Reformat Code" YourSolution.sln。--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参数。
与 MSBuild 相关的参数
--属性— 允许您覆盖 MSBuild 属性。 您可以单独设置每个属性(--properties:prop1=val1--properties:prop2=val2),或使用分号分隔多个属性--properties:prop1=val1;prop2=val2。请注意,分号不能用于值内部,例如:
--properties:ReferencePath="r:\reference1\;r:\reference2\"。 在这种情况下,请使用另一个--属性参数分别添加每个值——这些值将被组合。指定的属性将应用于所有分析的项目。 目前,没有直接的方法仅将属性设置为特定项目。 解决方法是为该项目创建一个自定义属性,并将其分配给所需属性,然后在 CleanupCode 参数中使用该自定义属性。
--工具集——使用此选项指定确切的 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"。
辅助参数
--详细程度——默认情况下,CleanupCode 仅在输出中显示错误消息。 使用此参数更改写入输出的信息量,按以下级别(从少到多详细):[OFF, FATAL, ERROR, WARN, INFO, VERBOSE, TRACE]。--LogLevel——使用此参数控制写入日志文件的信息量,通过--LogFile或--LogFolder指定。 以下是级别(从少到多详细):[OFF, FATAL, ERROR, WARN, INFO, VERBOSE, TRACE]。例如,如果 CleanupCode 出现问题,您可以联系 JetBrains Rider 支持并分享包含所有 TRACE 消息的日志文件:
--LogLevel=TRACE。--LogFile——使用此参数指定 CleanupCode 消息日志文件的绝对路径。 如果您还需要 MSBuild 和 Roslyn 的日志,请改用--LogFolder参数。--LogFolder——使用此参数指定一个目录的绝对路径,用于存储 CleanupCode 以及 MSBuild 和 Roslyn 的日志。 如果您只需要 CleanupCode 的日志,请改用--LogFile参数。--caches-home——允许您指定 CleanupCode 缓存数据的自定义位置。 默认情况下,使用 %LOCALAPPDATA% 目录,除非有设置文件,在这种情况下使用其中指定的目录。 如果您希望为缓存使用快速 SSD 磁盘,或者希望将所有构建处理数据存储在一个地方,此参数可能会有所帮助。--config-create和--配置— 这些选项允许您通过配置文件传递上述参数。 第一个选项将根据当前参数创建一个配置文件;第二个选项用于从该文件加载参数。--debug (-d)——使用此选项将 CleanupCode 的执行详情添加到输出中。 如果您在使用 CleanupCode 时遇到问题,这些详情在联系 支持团队时将非常有用。--eXtensions (-x)— 安装并启用指定的插件。插件通过其 ID 指定,您可以在 JetBrains Marketplace的插件页面上找到:找到所需插件并滚动到 概览 选项卡的底部。
例如, StyleCop by JetBrains插件的插件 ID 是
StyleCop.StyleCop,要使用此插件运行 CleanupCode,您需要将-x=StyleCop.StyleCop添加到命令行。要指定多个插件,请用分号分隔它们的 ID。
--源— 允许您指定一个自定义包源以安装插件,即包含插件的 .nupkg 文件所在的目录,例如--source="C:\plugins"。 如果未指定任何内容,CleanupCode 将在 JetBrains Marketplace中查找插件。--测量——一个诊断选项,如果您在特定硬件上运行工具时遇到性能问题,可以帮助您。 使用此选项时,需通过以下参数之一[sampling | timeline (Windows-only) | memory]定义分析类型,例如:CleanupCode.exe YourSolution.sln --measure=timeline执行完成后,CleanupCode 会创建一个执行快照并显示快照文件的路径。 您可以使用 JetBrains 工具研究快照:
采样或 时间线分析:要分析生成的 .zip 文件,请解压并使用 JetBrains dotTrace打开采样快照文件( .dtp )或时间线快照文件( .dtt )。
内存分析:要分析生成的 dotMemory 工作区文件( .dmw ),请使用 JetBrains dotMemory打开它。
--version (-v)— 使用此选项显示工具的当前版本并退出。--no-updates——默认情况下,CleanupCode 在每次运行时都会检查更新。 使用此选项禁用更新检查。
控制 ReSharper 设置的参数
--设置——默认情况下,CleanupCode 将使用 “解决方案团队共享”层 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。
MSBuild. 可能的问题和解决方案
当 CleanupCode 接收到目标解决方案文件时,它需要创建要清理的文件列表并初始化一些属性,例如语言版本。 CleanupCode 使用 MSBuild 从项目文件中获取此信息。
在大多数情况下,CleanupCode 会自动找到目标解决方案的正确 MSBuild 可执行文件。 但可能会有一些问题阻止自动检测,例如解决方案运行时的版本与已安装的 .NET SDK 版本不匹配。
如果 CleanupCode 出现类似 当前 .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 时,CleanupCode 将尝试使用 .NET SDK 中的 MSBuild 并忽略其他版本。 例如,如果您的计算机上安装了多个 MSBuild v 16.0,并通过 --dotnetcore 指定了 .NET 安装路径,CleanupCode 将使用指定安装中的 .NET MSBuild。 当未指定 --dotnetcore 时,CleanupCode 将查看解决方案目录,尝试找到 global.json ,并使用其中指定的 SDK 版本。 如果未找到任何内容,将使用最新可用的 SDK 版本。
项目引用。 可能的问题和解决方案
MSBuild 还被 CleanupCode 用于解析引用的项目和程序集中的符号。 有两个项目属性允许根据环境使用不同的引用: 平台 和 配置。 如果运行 CleanupCode 的环境与项目上次构建的环境不同,您可能会收到类似 无法解析引用 XXX:此引用未通过 MsBuild 解析 或 无法解析此引用。 无法找到程序集“XXX” 的错误。
如果您收到此类错误,请检查输出以查看构建配置是否存在不匹配。 例如
在上述内容中,您可以看到项目文件中指定的平台是 x86 ,但工具正在以 64 位模式运行。 要解决此问题,请使用 --属性 参数显式指定目标平台和配置: --properties:Platform=x64;Configuration=Debug。