【问题标题】:Is there a pretty printer / code formatter for C# (as part of build system)?是否有一个漂亮的 C# 打印机/代码格式化程序(作为构建系统的一部分)?
【发布时间】:2012-10-16 21:29:14
【问题描述】:

是否有漂亮的 C# 打印机/代码格式化程序(作为构建系统的一部分)?读作:“生活在 Visual Studio 之外”。对于 Java、C++/C、Go 来说似乎有很多这样的东西——所以 C# 也应该有一些位于 IDE 之外的代码格式化程序似乎是非常合理的?

(我实际上希望将格式化程序与 StyleCop 之类的东西结合起来,并让开发人员在提交之前将其作为流程的一部分运行)。

注意:不是语法高亮,就像网页中的代码一样。取而代之的是一个代码美化器,或代码漂亮的打印机,它将获取代码并将其格式化为样式/标准编码格式...... StyleCop 会进行样式检查以查看代码是否符合格式。

【问题讨论】:

  • 已经有很多 JavaScript 解决方案了。谷歌他们。
  • @Alvin 这没什么用。尝试自己在谷歌上搜索,看看你发现了什么相关/垃圾比率。请注意,OP 不是在为网站搜索语法高亮显示,他们正在寻找一种工具来正确地重新格式化代码以符合样式指南。
  • @Adriano 不,这无关。
  • @AlvinWong 我进入了一个无限循环,因为谷​​歌搜索 c# prettier code formatter 将我带到了完全相同的页面。

标签: c# pretty-print


【解决方案1】:

对于 .NET SDK 项目,可以使用dotnet format command

dotnet 格式是一种将样式偏好应用于项目或解决方案的代码格式化程序。首选项将从 .editorconfig 文件中读取(如果存在),否则将使用一组默认首选项。

如果项目不导入 .NET SDK 上不可用的内容(例如文本模板化 msbuild 目标),它也可能适用于经典 .NET Framework 项目。

源代码库https://github.com/dotnet/format

.editorconfig 规则为documented,可以从 Visual Studio 中导出,也可供 Visual Studio 使用。

【讨论】:

    【解决方案2】:

    更新:NArrange 不再开发(另请参阅https://github.com/MarcStan/narrange 以获得稍新的分叉)。


    要在构建过程中自动化代码格式化(一种微重构),您需要一个可以从命令行运行的工具(并且您可以轻松地集成到 msbuild 中)。

    如果您的需求不是太高级(作者将其定义为 beautifier),这是一个不错的选择:NArrange。它完全支持 C# 和 VB.NET for Framework 2.0,但也支持新语言版本的许多广泛使用的功能。

    NArrange 是一个 .NET 代码美化器,可自动组织 .NET 类中的代码成员和元素。

    【讨论】:

    • 这看起来已经死了
    • @andrewjboyd 是的,有一个 fork (github.com/MarcStan/narrange) 稍新,但该项目很久以前就被放弃了。
    • (注意这个答案是9岁)
    【解决方案3】:

    Microsoft 有一个代码格式化工具,它使用 Roslyn 根据他们的指南自动重写源代码。 请检查该链接 https://github.com/dotnet/codeformatter

    【讨论】:

    • 您是否在当前项目中成功使用了该项目?该项目存在一个问题,基本上说它已经死了。该项目上的comment in an issue 建议使用dotnet-format,这似乎是活跃的。
    • 我目前没有使用,我只是想分享一下有什么东西在做这个要求,去看看 dotnet-format。
    【解决方案4】:

    JetBrains 还制作了一个名为 CleanupCode 的免费命令行工具,它可以根据 .editorconfig 设置格式化 c#。我为它编写了一个名为 ReGitLint 的包装实用程序,它可以更轻松、更快速地作为预提交挂钩或在构建服务器上运行。如果您的队友使用 Visual Studio Code 而 ReSharper 不是一个选项,这会很有帮助。

    只需运行以下命令即可起床

    dotnet tool install JetBrains.ReSharper.GlobalTools
    dotnet tool install ReGitLint
    

    然后将以下内容添加到 .git/hooks/pre-commit

    #!/bin/sh
    dotnet regitlint -f staged --fail-on-diff
    

    要在 jenkins 上强制格式化,请将其添加到您的构建脚本中

    dotnet tool restore
    dotnet regitlint --jenkins
    

    更多选项请查看readme

    【讨论】:

    • 这应该是被接受的答案,很好!我很高兴这是一个免费工具,应该有助于我们整个团队的采用
    • 如果您还没有使用 ReSharper,this link explaining .editorconfig setup 可能会很有用。很棒的工具,虽然我希望它是免费和开源的。 (正如他们所说,第一次点击总是免费的。)
    【解决方案5】:

    您现在可以使用 https://www.npmjs.com/package/narrange 来利用 node.js 的强大功能 超级简单,可配置的设置:)

    const { createNArrange } = require("narrange");
    const path = require("path");
    
    createNArrange({
      srcPath: path.join(__dirname, "src/apps/mango"),
      configFilePath: path.join(__dirname, "config/NArrange.xml")
    });
    

    【讨论】:

    • 这似乎是 NArrange v0.2.9 的包装,由与原始软件不同的作者创建。
    【解决方案6】:

    如果您有关于空格和大括号放置的现有且不寻常的样式指南,AStyle 可能足够灵活以匹配它。 AStyle 不是特定于 C# 的,它可以处理许多类似 c 的语言。

    NArrange 如果恰好符合您的风格指南,也很好。它可以更具侵略性,例如它可以将您的部分类放入不同的区域并对您的方法进行排序。

    【讨论】:

      【解决方案7】:

      首先想到的是ReSharper。但是,它是 VS 的一个插件,这不是您所要求的。我不确定您是否可以将其设置为保存时自动格式化。

      来自他们的website

      ReSharper 可以重新格式化任意选定的代码块,所有代码 在当前文件中,一个目录中的所有文件,甚至整个 项目或解决方案,根据您的代码风格偏好。 ReSharper 为 C#、VB.NET、 JavaScript、CSS 和 XML 代码。重新格式化会影响大括号布局, 空行、换行和换行、各种空格 上下文、缩进、对齐多个结构等等 您可以在 ReSharper 选项对话框中微调的选项。

      【讨论】:

      • 它不能 - 我在 SO (oops) 上问了一个类似的问题。
      猜你喜欢
      • 2011-02-28
      • 1970-01-01
      • 2013-01-20
      • 2010-11-03
      • 2021-09-19
      • 1970-01-01
      • 2012-03-07
      • 2010-09-20
      相关资源
      最近更新 更多