有没有适用于C#的自动代码格式化工具?

65

我现在主要使用C#编写代码,偶尔会涉及一些Java。我特别喜爱Eclipse的一个功能,它拥有一个复杂的代码格式化器,可以将代码转换为任何想象得到的编码标准。那么有没有类似的工具适用于C#呢?Visual Studio的代码格式化(Ctrl+K, Ctrl+D)效果较差,而StyleCop只能检查源代码,无法修复。

我的理想工具应该是一个控制台程序(方便包含在自动构建或预提交钩子中,在Linux和Mono上执行),具有基于文本文件的配置(易于存储在项目仓库中)以及图形化规则编辑器和预览 - 就像Eclipse Code Formatter一样。

14个回答

49
对于Visual Studio,可以看一下ReSharper。它是一个很棒的工具,绝对是必备的。4.0版本之后有您要找的代码格式化和清理功能。还有插件集成StyleCop,包括格式设置文件。
您可能还想要Agent Smith插件用于拼写标识符和注释。 ReSharper支持每个解决方案的格式设置文件,可以检入版本控制系统并由整个团队共享。代码清理的键盘快捷键是Ctrl+EC
在“原始”的Visual Studio中,可以使用Ctrl+KCtrl+D自动格式化当前文件,Ctrl+KCtrl+F格式化所选文本。
至于可用于提交挂钩的命令行工具,可以尝试NArrange。它是免费的,可以一次处理整个目录,并且可以在Mono以及Microsoft .NET上运行。
有些人也使用艺术风格命令行工具,尽管它需要Perl,并且在C/C++代码中的表现比在C#中要好。

工作得很好...而且它不仅可以格式化代码! - jle

24

2
请务必配置您自己的编辑器配置文件:http://editorconfig.org/ - Shaun Luttin
https://github.com/dotnet/codeformatter/releases - caoanan
3
无法使其工作,它什么都不做。而且为什么这个工具需要一个项目文件呢?格式化不应该是针对每个文件的吗? - John
还有CSharpier https://github.com/belav/csharpier(受Prettier启发) - aloisdg
1
请注意,此工具似乎已被 dotnet-format 替代。 - Chris Long

15

除了 @Chris Karcher 的回答外,您还可以通过按下 Ctrl+KCtrl+D 来自动格式化整个文档。

这些格式化功能适用于多种文件格式 - 在丑陋的 HTML 上表现得十分出色。


6

另一个选择:NArrange;

  • 免费
  • 基于控制台(适用于提交钩子等场景,但仍可在VS中用作“外部工具”)
  • 灵活的配置文件

4
我尚未成功使用NArrange进行代码格式化(还没成功?)。它似乎只是根据访问级别或成员类型等基本随意的标准,随机排列源文件中成员的顺序,但方法内部存在的错误缩进和运算符间距却没有被改变。实际上,NArrange文档甚至说:“NArrange目前不解析构造函数、方法和属性的语句级别”- 如果这意味着我所认为的意思,那么NArrange可能对于代码重组很有用,但并没有真正做到很好的格式化。 - O. R. Mapper

5

对于我来说,Ctrl + Shift + F 对应的是“在文件中查找”功能。当我需要格式化代码时,我会将其高亮并按下Ctrl + KCtrl + F

我知道这并没有涉及自动格式化。我只是想为那些可能不知道Visual Studio拥有这个功能的人澄清一下。


3

http://www.sourceformat.com/

这个工具价格大约为30美元,我试用过,它可以使用多种语言进行翻译。

我最喜欢这个工具的原因是它不会检查代码文件的正确性。我可以从互联网上发布代码片段,并且无论它们是否缺失代码的某些部分,都能正确地翻译它们。其他工具在这种情况下会抱怨。该工具还可以轻松地集成到编辑器中,因为它允许命令行驱动。

其他工具:

http://www.polystyle.com/index.jsp

http://astyle.sourceforge.net/(开源)


3

我听说过关于ReSharper的好评如潮。它已经在我的学习清单上了。


但它每年需要花费1000美元? - Peter Mortensen

2

我没有直接做到这一点,但我使用R#的Agent Smith插件来实现。不幸的是,R#并不是免费的。


2

或其替代品 https://github.com/DotNetAnalyzers/StyleCopAnalyzers - cjbarth

1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接