TidySmith
按团队想要的顺序排列 C# 代码:对成员排序和分组,带预览且只需一次撤消;按你的规则设置区域;按你的行长度对注释换行——并在编辑器中可整理的地方显示灰色圆点。
免费 · Visual Studio 2022 和 2026 · 14 种界面语言 · 无遥测
为什么选择 TidySmith

安全的设计
基于 Roslyn 语法树构建:成员连同其注释、文档和特性一起移动;绝不跨越 #if 和 #region 块;无法安全排序的类保持不变。先通过预览显示差异,“应用”只需一次撤消即可还原。
团队的顺序
组的顺序、访问级别、静态成员、名称——在选项页上设置,或写入 .editorconfig,让每个人都得到相同的结果。内置 StyleCop 和 CodeMaid 预设。
无需手册也能发现
顺序不对的类或过长的注释下方会显示灰色圆点;Ctrl+. 会在 Visual Studio 操作旁边提供修复。熟悉命令后,即可关闭提示。
免费,没有附加条件
没有订阅、没有“Pro”版、不收集数据,也不会在“输出”窗口或启动时显示消息。我们唯一的请求是:在你用过一段时间之后,到 Marketplace 给个评分。支持 Visual Studio 2022 和 2026,x64 和 ARM64。
功能
- 对类、文件或在解决方案资源管理器中选择的文件排序成员——并预览移动的内容。
- 编辑器中的提示:在可整理的地方显示灰色圆点,修复位于灯泡 (Ctrl+.) 中。
- 按你的规则设置区域:按成员组、按访问级别或两者兼有,使用你的区域名称;也可以完全不用区域。
- 合适的注释:将
//和///注释按你的行长度换行,并合并短行。 - 保存时整理:保存 C# 文件时运行你选择的步骤;默认关闭。
- 结构窗口:文件的成员、方法的大小和复杂度,拖动即可重新排序。
- 小工具:切换到相关文件、对行排序和合并行、在解决方案资源管理器中查找文件、只折叠或展开区域。
所有命令都位于 编辑 › TidySmith 和代码编辑器的上下文菜单 (右键单击 › TidySmith) 中;Order Members 也位于解决方案资源管理器中文件、文件夹和项目的上下文菜单中。
排序成员
Order Members… 按种类 (常量、字段、构造函数、属性、方法…)、访问级别 (public 优先)、静态成员在实例成员之前,以及 (如果需要) 按名称对类的成员排序——顺序由选项页或 .editorconfig 设置。
- 先预览:显示移动内容的差异;应用 是一次编辑,因此一次撤消即可全部还原。“不再询问”会关闭预览。
- 范围:插入点所在的类或整个文件 (在预览中选择),或在解决方案资源管理器中选择的所有 C# 文件——文件、文件夹、项目。
- 随成员一起移动的内容:其注释、文档和特性。空行保持原样;组之间留一个空行。
- 绝不触碰的内容:
#if或#region中的成员只在其所在块内排序;成员与大括号在同一行、一行中有两个成员或存在语法错误的类保持原样;跳过生成的文件 (*.g.cs、*.Designer.cs)。
可作为起点的预设:TidySmith (重载和接口实现放在一起)、StyleCop (SA1201、SA1202、SA1204——严格按访问级别) 和 CodeMaid (CodeMaid 的默认设置,适合从它迁移过来的团队)。
编辑器中的提示
在 TidySmith 能帮上忙的地方,名称下方会显示三个灰色圆点——与 Visual Studio 标记其自身建议的方式相同。将指针悬停在上面可查看原因;Ctrl+. 会提供修复,并附带更改预览。

| 插入点位于 | Ctrl+. 提供 |
|---|---|
| 类的名称 | 对类或文件的成员排序、按你的规则添加区域、移除类的区域、在结构窗口中打开 |
| 超过行长度的注释 | 对注释换行 |
#region 行 | 移除此区域 (代码保留) |
| 选中的多行 | 对行排序 (仅限平面列表)、合并行 |
圆点只会出现在顺序不对的类、超过行长度的注释以及与你的规则不同的区域上——不会出现在其他地方。圆点和灯泡操作有各自的开关;“仅在我更改过的文件中”可让旧代码保持安静。
按你的规则设置区域
Add Regions to This File… 会在预览后,按你的规则在相应位置插入 #region 行。区域是团队的决定,因此默认值为无区域:在你做出选择之前,该命令会打开设置。

- 划分方式:每个成员组一个区域 (Fields、Methods…)、每个访问级别一个区域 (Public、Private…),或两者兼有 (Public methods)。
- 你的名称:每个组都有自己的区域名称;同名的组共享一个区域,关闭的组留在区域之外。接口实现可以获得以接口命名的区域 (IDisposable)。
- 没有干扰:成员少于最小数量 (默认为 2) 时不创建区域;只包围一个构造函数的区域对谁都没有帮助。
- 随时可以再次运行:类中的区域会被重建,而不是嵌套。成员会先排序,因此每个组都连成一体。
- 手动操作:Add Region Around Selection (插入点停在
#region之后等待输入名称)、Remove Region at Caret、Remove Regions in This File——只删除#region和#endregion行,代码保留。
StyleCop 规则 SA1124 禁止使用区域;这就是默认值为无区域的原因——也是在该设置下保存时整理会移除区域的原因。
保存时整理
保存 C# 文件时,TidySmith 可以对其成员排序、按规则设置区域、对注释换行,以及删除行尾空格和多余的空行——每个步骤都有自己的开关。只处理正在保存的文件,从不处理生成的文件;状态栏会显示更改内容,按 Ctrl+Z 可还原。Tidy This File 可按需运行相同的步骤。
默认关闭。请在 Order Members 得到团队想要的结果后再打开——否则首次保存旧文件时,整个文件都会被重新排序。
结构窗口
视图 › 其他窗口 › TidySmith Structure:活动 C# 文件的类型和成员。它会跟随插入点,单击即可转到成员,搜索可进行筛选,将一个成员拖到另一个成员上即可移动到那里——与 Order Members 相同的安全移动。方法会显示其长度和圈复杂度;超过选项页上的限制时会变成橙色。

小工具
大家怀念的 CodeMaid 命令,位于 编辑 › TidySmith 和编辑器的上下文菜单中。
Switch File
打开与当前文件配套的文件——标记及其代码、资源文件及其设计器、代码及其测试——无需在解决方案资源管理器中查找。
| 从 | 到 (以及返回) |
|---|---|
MainWindow.xaml | MainWindow.xaml.cs |
Order.razor | Order.razor.cs |
Index.cshtml | Index.cshtml.cs |
Strings.resx | Strings.Designer.cs |
MainForm.cs | MainForm.Designer.cs |
OrderService.cs | OrderServiceTests.cs ——也包括解决方案中的测试项目;…Test.cs 和 ….Tests.cs 也可以 |
菜单会显示目标名称 (“Switch to OrderServiceTests.cs”),没有可切换的文件时则不可用。为它绑定自己的快捷键会非常顺手——见下文。
Sort Selected Lines
对 using、枚举成员或列表项排序;逗号会留在列表需要的位置。只对平面列表排序——每行一项、缩进相同、没有空行、没有语句——因此误选的方法或整个文件绝不会被打乱;状态栏会说明原因。
Join Lines
将选中的行合并为一行,或将插入点所在的行与下一行合并。
Find This File in Solution Explorer
在解决方案资源管理器中选中编辑器中的文件。
Collapse All Regions 和 Expand All Regions
只折叠或展开 #region 块;方法保持原样。不同于 Ctrl+M, Ctrl+O (也会折叠方法) 和 Ctrl+M, Ctrl+L (折叠全部)。
默认不占用任何快捷键——Visual Studio 的按键保持原样。可在 工具 › 选项 › 环境 › 键盘 中为任意命令绑定快捷键:在“显示命令包含”中输入 TidySmith.。
设置
工具 → 选项 → SmithWorks → TidySmith。每个选项都有说明。
| 选项 | 默认值 |
|---|---|
| 灯泡 (Ctrl+.) 中的 TidySmith 操作 | 开 |
| 可整理处的灰色圆点 | 开 |
| 成员顺序 | TidySmith 预设 |
| 排序前预览 | 开 |
| 区域 | 无区域 |
| 注释行长度 | 120 |
| 保存时整理 | 关 |
| 长方法 (行数) · 复杂方法 | 60 · 10 |
| 请求在 Marketplace 上评分 | 开 |
设置保存在 %LocalAppData%\TidySmith 中;.editorconfig 中有值时以其为准。

按存储库:.editorconfig
将规则放在代码旁边,整个团队就会得到相同的结果;.editorconfig 中的值优先于选项页 (除非关闭了“使用 .editorconfig 中的顺序”)。
[*.cs]
tidysmith_member_order = stylecop
tidysmith_regions = kind
tidysmith_region_min = 2
max_line_length = 120
| 键 | 值 |
|---|---|
tidysmith_member_order | tidysmith、stylecop、codemaid,或按顺序列出的组:constants, fields, constructors, properties, methods… |
tidysmith_regions | none、kind、access、kind_access |
tidysmith_region_min | 创建区域所需的最少成员数:2 |
max_line_length | 注释换行所用的行长度 |
常见问题
它与 CodeMaid 有何不同?
TidySmith 基于 Roslyn 语法树而不是旧的代码模型工作,因此 #if、注释和特性都留在应有的位置;它会显示预览,且只需一次撤消;顺序可以写在 .editorconfig 中;它可在 x64 和 ARM64 上的 Visual Studio 2022 和 2026 中运行。它只支持 C#,并省略了 Visual Studio 现在自己就能完成的功能 (代码清理、生成进度)。
为什么某个类没有被排序?
当排序可能破坏或打乱某个类时,TidySmith 会保持其不变:存在语法错误、成员与大括号在同一行、一行中有两个成员。#if 或 #region 中的成员只在其所在块内移动。生成的文件绝不会被触碰。
可以撤消更改吗?
可以:每个命令和每次保存都是一次编辑,因此按一次 Ctrl+Z 即可还原。在解决方案资源管理器中处理时,未打开的文件会直接写入磁盘——此时请使用版本控制。
为什么 Sort Selected Lines 没有任何作用?
它只对平面列表排序,因此属于代码的选定内容——语句、块、缩进不同的行或中间有空行的行——绝不会被打乱。状态栏会给出说明。
Add Regions 没有任何作用。
默认规则是无区域。请在设置的“区域”组中 (该命令会打开它) 选择划分方式,或在 .editorconfig 中设置 tidysmith_regions。
VB、C++ 或 XAML 呢?
TidySmith 适用于 C#。如果有需求,以后可能会支持其他语言——请在 Feedback 仓库中告诉我们。
TidySmith 会发送数据吗?
不会。一切都在 Visual Studio 中针对你的文件运行;不会向任何地方发送任何内容——没有遥测,没有请求。
在哪里报告问题或提出功能建议?
请在 GitHub 上的 Feedback 仓库中提交 issue——那里有用于报告错误和提出建议的表单(如有私密名称,请先替换)。也可以使用 Marketplace 上的 Q&A 选项卡。
更新日志
1.0.2
- 在扩展确实有用之后,只请求一次在 Marketplace 上评分——带有“以后再说”和“不再询问”,也可以在选项中关闭。
1.0.1
- Order Members 和 Structure 窗口加入了与其他 SmithWorks 扩展共用的 SmithWorks 工具栏(视图 › 工具栏 › SmithWorks)。
1.0.0
- 首个公开版本。
合适的注释
Format Comment 将插入点处的
//或///注释 (或文件中的所有注释) 按你的行长度换行——即.editorconfig中的max_line_length,或 120。长行会被拆分,短行会被合并,较长的<summary>会单独成行。代码示例 (<code>)、列表、分隔线和注释掉的代码保持原样。