T4模板 - 避免包含文件中的空行

时间:2012-05-07 08:13:34

标签: t4

我在单独的文件中拆分T4代码以实现模块化和重用,但我发现每个文件在输出中都是空行。例如:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".ttinclude" #>
<#@ Import Namespace="System.Collections.Generic" #>
<#@ Include file="Includes.tt" #>
namespace <#= NameSpace #>
{

如果Includes.tt列出了3个其他* .tt文件,我在命名空间前得到3个空行。当我添加代码并将其拆分为单独的* .tt文件时,这个空白空间不断增长。事实上,我将所有包含文件打包到一个Includes.tt中,希望这只花费我一行空。它没有。我仍然在Includes.tt中列出的每个文件中得到一个空行。有没有办法避免这种情况?

编辑:假设我没有犯下一个愚蠢的错误(而且我真诚地希望我是这样),问题并不像第一眼看上去那么微不足道:

a)通过附带的T4文件重复使用和模块化与T4本身一样久,并在最新的MSDN杂志文章中提到:“在T4代码生成解决方案中管理复杂性”。

b)如果代码是自动生成的,那并不意味着它的格式错误或清晰度差。

c)使用当前的解决方案,在我的情况下,对于每个生成的.cs文件,读者必须滚动一个空页,直到她开始看到一些生成的文本。所有这些都是因为我在多个包含的.tt文件之间分割了我的代码。这似乎不对。

6 个答案:

答案 0 :(得分:15)

哦好吧,解决方案结果是微不足道的,如果有点出乎意料:只需将include指令 next 互相放在一起,而不是将放在

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".ttinclude" #>
<#@ Import Namespace="System.Collections.Generic" #>
<#@ Include file="Usings.tt" #> <#@ Include file="PropertyTypeEnum.tt" #> <#@ Include.... 

答案 1 :(得分:13)

添加到Tony的答案:你可以通过在T4括号内添加换行符来避免这么长的行:如下所示:

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".ttinclude" #>
<#@ Import Namespace="System.Collections.Generic" #>
<#@ Include file="Usings.tt" 
#><#@ Include file="PropertyTypeEnum.tt" 
#><#@ Include....
#><#@ Include....
#><#@ Include....
#><#@ some other stuff 

答案 2 :(得分:12)

我有一个更基本的问题,<#@之前的每个<?xml标题行在输出中都会产生自己的空行,从而导致错误:

error : Unexpected XML declaration.
        The XML declaration must be the first node in the document,
        and no white space characters are allowed to appear before it.
        Line 7, position 3.

经过一段时间的挖掘后,我发现.tt文件有Unix EOL。

当我切换到Windows EOL时,转换删除了空行。

答案 3 :(得分:12)

这在VS 2013中也适用于我:

<#@ include file="Other.tt" #><##>

等等

<#@ include file="One.tt" #><##>
<#@ include file="Two.tt" #><##>
...

<##>只是一个空控制块。 <# /* any code here */ #>同样有效。

答案 4 :(得分:3)

在我的情况下,空白行来自import语句的结束标记后的尾随空格。

答案 5 :(得分:1)

对我来说,使用Unix行尾( LF )时出现问题。使用Windows行尾( CR LF )解决了我的问题,可能会解决您的问题。