使用t4模板时出现了错误的缩进

18

我目前正在使用T4模板工作,但我注意到有时代码的缩进不正确,我该如何避免这种情况?

例如,在模板中我有以下代码:

}
    <# } #>
    this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}

在生成的类中,它看起来像这样

}
                 this.cmbDecisionList.Dat = dataSource;
      this.btnDec.Enabled = dataSource.Count > 0;
}

通常我会通过让我的T4模板更丑陋并去除其中的空格来避免这种情况,这样生成的代码看起来更漂亮。 :) - Allan S. Hansen
是的,但它很复杂,不容易理解... - John Jerrby
1
通常生成的代码并不打算阅读,但我知道您希望拥有漂亮的代码,即使它是自动生成的。除了更改您的T4模板之外,您还可以在输出文件上使用“编辑”>“高级”菜单中的“格式化文档”选项。据我所知,tangible的T4编辑器在生成代码时也具有“格式化输出”选项。 - Nico
2个回答

41

请允许我通过用点替换空格来说明您的问题。

}
....<# } #>
....this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}

在生成的类中,它看起来像这样:

}
........this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}
现在,让我们移除前面的圆点。
}
<# } #>
....this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}

在生成的类中,它看起来像这样

}
....this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}

6
看到这样简单而准确的解决方案描述,我几乎要哭了。这个问题一直困扰着我已经有一段时间了。谢谢你。 - stvn

12

我认为你努力使生成的代码易读是很好的。我们偶尔需要对生成的代码进行调试,如果代码易于阅读,则更方便 (当然,我们从不编辑生成的代码)。

我采用了一种模式,在其中我可能会牺牲一些模板的可读性,以获得生成代码的可读性。

Generated code
<#
    T4 statements
#>
Generated code

IE #> 总是出现在换行符之后,并且紧接着会添加一个换行符。

然后,您的代码将被更改为:

}
<# 
    } 
#>
    this.cmbDecisionList.Dat = dataSource;
    this.btnDec.Enabled = dataSource.Count > 0;
}

这样生成的代码往往会按预期进行格式化。

这可能不是保留格式的唯一方法,但这是我使用的方法。

希望这有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接