2012-02-02 65 views
2

在我當前的項目中,我們有幾個代碼生成器例程來幫助我們完成一些盲目的任務。從技術角度來看,一切正常,所以這可能比真正的問題更令人好奇:當我打開一段新生成的代碼時,它當然不是正確縮進(儘管在語法上是正確的)。生成的代碼縮進的API

現在,問題是:是否有一個API可以用來縮進一段c#代碼?就像我在VS2010中使用快捷鍵Ctrl + E,D時發生的情況一樣。

謝謝!

只是爲了澄清,我正在尋找一個這樣的功能:

string GetProperlyFormattedCode(string notFormattedCode); 

其中notFormattedCode是一張有效的C#源代碼,並且函數的輸出的格式規則應用後相同的代碼。換句話說,我正在尋找Visual Studio的「編輯 - >高級 - >格式選擇」命令後面的功能。

+2

當您生成代碼時是否需要縮進? http://msdn.microsoft.com/en-us/library/system.codedom.compiler.indentedtextwriter.aspx會有幫助嗎? – sisve 2012-02-02 18:47:22

+0

嗨,我認爲這不是我正在尋找的 - 我正在用一個例子編輯這個問題。 – Andrea 2012-02-02 18:50:35

+0

可能重複的[你如何從C#編程調用「文檔格式」?](http://stackoverflow.com/questions/813119/how-do-you-call-document-format-programmatically-from-c) – 2012-02-02 20:17:13

回答

1

這個問題似乎回答:

How do you call "Document Format" programmatically from C#?

短是使用Visual Studio的對象模型調用format命令。

+0

這並不回答這個問題。您引用的問題是關於「插件上下文」中的格式。這將需要你做一個加載項。這個問題不涉及插件。 – Nuzzolilo 2012-10-29 06:19:20

+0

我建議他可以通過編程方式利用內置在VS中的代碼格式,這恰好是OP用作示例的代碼(CTRL + E,D)。爲什麼要在嘗試利用已經喜歡的格式化程序時創建一些內容? – EBarr 2012-10-29 14:30:06

0

要縮進代碼只需使用Microsoft.CodeAnalysis.CSharp nuget包和.NET框架4.6+。示例代碼:

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

一行代碼:

csCode = CSharpSyntaxTree.ParseText(csCode).GetRoot().NormalizeWhitespace().ToFullString(); 

您也可以使用NArrange以按你的CS文件的方法,組織usings,創建區域等需要注意的是NArrange沒有做任何縮進。