C#正确格式化(缩进,对齐)C#

Pau*_*art 6 c# code-generation code-formatting

我们有一个代码生成器,它可以管理给定数据库的模式,以自动化我们的内部n层架构.输出是各种C#部分类,每个文件一个.

在使用munge所有字符串的代码中,我们尝试尽可能地保持缩进和格式化,但是当你在Visual Studio中打开文件时格式化是错误的.一个快速的ctrl-k,ctrl-d修复了它,但很明显这次重新格式化会在下次生成类时丢失.

我想知道的是,我是否有办法以某种方式自动格式化文本文件的内容,就像Visual Studio一样?

伪代码

Create "code" object, passing text file to constructor
Invoke "format" method
Re-save text file
Run Code Online (Sandbox Code Playgroud)

任何帮助非常感谢.

编辑: 我应该澄清 - 我希望能够从我的C#代码调用格式,该代码创建包含我生成的C#的文本文件.代码的格式可以标准化(不必是每个开发人员),我不想安装任何第三方应用程序.

我似乎记得在C#中有一个包含用于创建C#的类的命名空间:http://msdn.microsoft.com/en-us/library/system.codedom(VS.80).aspx,但我不确定如果它包含任何可以帮助的类.

进一步编辑: 我的代码生成器是一个通过点击一次安装部署的winforms应用程序.它在内部被许多开发人员使用.我需要一个不需要每个开发人员在他们的机器上安装工具的解决方案.

Che*_*ian 6

看看Narrange.你可能需要自动化这些东西作为构建的一部分.
不确定它是否符合您的所有要求.
报价:

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


Dan*_*ain 5

为了扩展Cherian的答案:

NArrange将允许您进行大量的代码格式化.它是开源的,源代码可以在他们的网站上找到,因此您可以使用您的工具集成并重新分配它.

您应该只需要dll,然后查看如何调用格式的exe.它还将创建正在格式化的代码的备份.如果它符合您的需求,它真的是一个很好的工具.


Ant*_*lov 5

要以编程方式正确缩进代码,您将需要Microsoft.CodeAnalysis.CSharp nuget包和.NET Framework 4.6+。样例代码:

public string ArrangeUsingRoslyn(string csCode) {
    var tree = CSharpSyntaxTree.ParseText(csCode);
    var root = tree.GetRoot().NormalizeWhitespace();
    var ret = root.ToFullString();
    return ret;
}
Run Code Online (Sandbox Code Playgroud)

单线:

csCode = CSharpSyntaxTree.ParseText(csCode).GetRoot().NormalizeWhitespace().ToFullString();
Run Code Online (Sandbox Code Playgroud)

您也可以使用NArrange对CS文件中的方法进行排序,组织使用方法,创建区域等。请注意,NArrange不会缩进任何内容。


Gre*_*man 0

仅当您将代码生成器作为 VS 附加组件运行时 - 每个开发人员都会有不同的设置。