T4模板空白控件

时间:2011-12-21 17:40:05

标签: t4

是否有任何命令可以轻松控制T4模板输出空白?我得到了一些过度的标签。我以为我记得一种控制模板空白的方法......

3 个答案:

答案 0 :(得分:5)

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 :(得分:2)

可能没有很好的解决方法,这是T4引擎本身的一个问题,IMO。但是,如果您在保留指令嵌套的同时尝试减少输出中的前导选项卡/空格,则可以执行以下操作。

<强>之前

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

<强>后

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

E.g。在第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();
}

YMMV

答案 2 :(得分:2)

只是因为有人正在寻找使用writeLine方法添加标签。逃脱角色有效。

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