C# 您是否可以编写大量的@指令,如汇编、导入、模板,而不在T4中发出模板输出?

C# 您是否可以编写大量的@指令,如汇编、导入、模板,而不在T4中发出模板输出?,c#,visual-studio,t4,C#,Visual Studio,T4,我正在修改一个T4模板,它会在我的输出(一个.cs文件)的顶部产生大量的空行,这是由于.tt文件包含以下.t内容,它导入了许多程序集,就像这样,每个关闭#>标记都会超出宏范围,回到文字模板文本范围: <#@ template language="C#" hostspecific="True" debug="True" #> <#@ assembly name="EnvDTE" #> <#@ assembly name="System.Core.dll" #>

我正在修改一个T4模板,它会在我的输出(一个.cs文件)的顶部产生大量的空行,这是由于.tt文件包含以下.t内容,它导入了许多程序集,就像这样,每个关闭#>标记都会超出宏范围,回到文字模板文本范围:

<#@ template language="C#" hostspecific="True" debug="True" #>
<#@ assembly name="EnvDTE"  #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.Xml" #>
<#@ assembly name="System.Configuration" #>
<#@ assembly name="System.Windows.Forms" #>
<#@ assembly name="FirebirdSql.Data.FirebirdClient" #>  
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="FirebirdSql.Data.FirebirdClient" #>  
<#@ import namespace="System.Data.Common" #>
<#@ import namespace="System.Diagnostics" #>
<#@ import namespace="System.Globalization" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Text.RegularExpressions" #>
<#@ import namespace="System.Configuration" #>
<#@ import namespace="System.Windows.Forms" #>
<#@ import namespace="Microsoft.VisualStudio.TextTemplating" #>
<#+
#pragma warning disable 0162


#>
部分后面是否有空格?造成这种情况的是换行符而不是空格。如果这是一个C预处理器#define参数,预处理器将使用换行符。实际上,T4在每个
之后都会发出换行符,但它要求每个
部分最多有一个@directive,这是我见过的最糟糕的事情之一。我在模板中没有注意到这种行为,尽管我肯定没有使用那么多指令。我认为T4应该在
指令后去掉一个换行符,除非换行符前有额外的空格,但我可能错了。无论如何,您发布的代码在
FirebirdClient
指令后都包含空格。删除它并检查它是否改变了什么。删除空格仍然会留下20多个空行,我相信这是T4的设计。我认为,这里应该做的是将所有这些移到一个新的.NET程序集中,并使T4模板更简单。
<#@ assembly name="EnvDTE" 
    assembly name="System.Core.dll" #>
<#@ assembly name="EnvDTE" assembly name="System.Core.dll" #>