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 ファイルに分割していると、この空きスペースが増え続けます。実際、私はすべてのインクルード ファイルを 1 つの includes.tt にまとめました。そうではありませんでした。私はまだ、Includes.tt にリストされている各ファイルごとに 1 行の空行を取得しています。これを回避する方法はありますか?

編集:私がただのばかげた間違いを犯していないことを前提として(そして私はそうであることを心から願っています)、問題は一見したように些細なことではありません:

a) 含まれている T4 ファイルによる再利用とモジュール性は、T4 自体と同じくらい古いものであり、最新の MSDN マガジンの記事「Managing Complexity in T4 Code-Generation Solutions」で言及されています。

b) コードが自動生成された場合、フォーマットが不適切であったり、読みにくくても問題ないという意味ではありません。

c) 現在のソリューションでは、私の場合、生成された .cs ファイルごとに、生成されたテキストが表示されるまで、読者は 1 つの空のページをスクロールする必要があります。すべては、含まれている複数の .tt ファイル間でコード生成を分割したためです。それは正しくないようです。

4

6 に答える 6

16

まあ、解決策は些細なことであることが判明しましたが、多少予想外でした: include ディレクティブを上下に配置するのではなく、隣り合わせに配置するだけです:

<#@ 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 に答える