2011-12-21 91 views
3

是否有任何命令可以輕鬆控制T4模板輸出空格?我得到了一些過度的tab。。我以爲我想起了一個辦法來控制模板空白...T4模板空白控件

回答

4

PushIndent,PopIndent,ClearIndent http://msdn.microsoft.com/en-us/library/bb126474.aspx

不要格式化你的可讀性模板。你必須控制塊之外的任何空格將在輸出

for(int i=0; i < 10; i++) 
{ 
    #> 
    Hello 
    <# 
} 

最終將結束作爲

Hello 
     Hello 
     Hello 
     Hello 
     Hello 
     Hello 
+1

「不要格式化您的模板以提高可讀性」讓我非常難過。 :( – 2015-11-04 19:25:19

+0

請參閱下面的Josh.M的回答,你放置指令的地方決定了代的起點,將它們保留在位置0以獲得更多的控制,並且如果在指令後沒有文本,它會影響你的換行符格式化模板輸出是非常有可能的,但需要花費很大的努力,但我更喜歡這樣做,因爲它在調試時節省了時間,當我創建一個新模板時。 – Volkirith 2017-08-29 10:19:52

2

有可能沒有很大的修復到這一點,這是與T4發動機本身的問題, IMO。但是,如果您要在保留指令嵌套的同時減少輸出中的前導製表符/空格,則可以執行以下操作。

以前

<# for (...) { #> 
    <# if (...) { #> 
     SomeText 
    <# } #> 
<# } #> 

<# for (...) { #> 
<#  if (...) { #> 
     SomeText 
<#  } #> 
<# } #> 

例如在第0列開始指令,在指令本身內縮進!除此之外,你可能要修剪多餘的線條:

private void TrimExtraneousLineBreaksAfterCommentsFromGeneratedFile(ref string fileText) 
{ 
    Regex regex = new Regex(@"(//.+?)(?:\r?\n){2,}"); 

    // Replace multiple coniguous line breaks, after a comment, with a single line break. 
    fileText = regex.Replace(fileText, "\r\n"); 
} 

private void TrimExtraneousLineBreaksFromGeneratedFile(ref string fileText) 
{ 
    Regex regex = new Regex(@"\r?\n(?:\s*?\r?\n)+"); 

    // Replace multiple coniguous line breaks with 2 line breaks. 
    fileText = regex.Replace(fileText, "\r\n\r\n"); 

    // Remove spaces/line breaks from the file. 
    fileText = fileText.Trim(); 
} 

因人而異

2

只是櫃面有人正在使用WriteLine方法添加標籤。轉義字符起作用。

<# 
for(int i=0; i < 10; i++) 
{ 
    this.WriteLine("\tHello"); 
} 
#>