22

我将 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 文件之间拆分了我的代码生成。这似乎不对。

4

6 回答 6

17

添加到托尼的答案:您可以通过在 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 
于 2013-11-08T14:02:26.423 回答
16

哦,好吧,结果证明这个解决方案是微不足道的,如果有点出乎意料的话:只需将包含指令放在一起,而不是一个在另一个下面

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ output extension=".ttinclude" #>
<#@ Import Namespace="System.Collections.Generic" #>
<#@ Include file="Usings.tt" #> <#@ Include file="PropertyTypeEnum.tt" #> <#@ Include.... 
于 2012-05-08T02:04:10.337 回答
13

我有一个更基本的问题,即之前的每个<#@标题行在<?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 时,转换删除了空白行。

于 2014-09-06T17:48:59.587 回答
13

这在 VS 2013 中也适用于我:

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

所以

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

<##>只是一个空的控制块。<# /* any code here */ #>也可以。

于 2014-09-27T16:28:21.647 回答
5

import在我的情况下,空行是由语句结束标记后的尾随空格引起的。

于 2016-09-01T12:07:02.323 回答
1

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

于 2020-06-09T13:57:21.487 回答