我们有一个.cs文件和一个.vb文件,它们都以各自的语言链接到几十个项目中,以提供公共的程序集信息。我希望在T4中设置它们之间的共同方面,方法是将每个方面移到一个模板中。
AssemblyInfo.cs和AssemblyInfo.vb应该是输出文件名。但是,我知道,通常情况下,其中任何一个的T4模板都将被命名为AssemblyInfo.tt。
由于我显然不能有两个名称完全相同的T4模板,我如何输出两个仅通过扩展名不同的文件?
我不能重新命名要写的文件,而不把它们从许多不同的项目中删除,然后不得不重新链接它们,所以这是不可能的。
是否有某种指令可以用于手动指定输出文件名,以便模板可以有不同的名称?
发布于 2013-11-14 20:17:45
默认情况下,一个T4模板不可能有多个输出文件。但是有一些实现为您提供了这种可能性。例如,如果您正在使用有形的T4编辑器,它们将提供一个免费的模板库,其中包含一个名为“TemplatelFileManagerV2.1”的可包含模板。在T4模板中引用这一点可以生成多个输出文件,甚至在解决方案的不同项目中也是如此。
这是如何对你起作用的:
<#@ template language="C#" hostSpecific="true" #>
<#@ include file="TemplateFileManagerV2.1.ttinclude #>
<#
var manager = TemplateFileManager.Create(this);
manager.StartNewFile("output.cs");
#>
// content here will be rendered into
// output.cs file
<#
manager.StartNewFile("output.vb");
#>
// content here will be rendered into
// output.vb file
<#
manager.Process();
#>您可能会遇到困难,因为您在同一个T4模板中使用两种不同的输出语言。因此语法高亮显示会被弄乱.
希望这有帮助
发布于 2015-03-25 16:51:05
只需将更多的.ttN文件放在同一个目录中即可。并规范每个.ttN文件中的扩展名:
AppResources.tt <#@ output extension=".resx" #>
AppResources.tt2 <#@ output extension=".de.resx" #>
AppResources.tt3 <#@ output extension=".nl.resx" #>发布于 2015-04-28 23:46:53
比所有这些都简单得多。只需将.tt附加到所需的文件名并使用:
<#@ output extension=""#> client_stubs.h.tt
<#@ output extension="" encoding="utf-8"#>
<#@ include file="Common.t4" #>
class client_stubs
{
<#
foreach (string member in class_members.Keys)
{
#>
int <#=member#>;
<#
}
#>
}client_stubs.cpp.tt
<#@ output extension="" encoding="utf-8"#>
<#@ include file="Common.t4" #>
#include "client_stubs.h"
<#
foreach (string member in class_members.Keys)
{
#>
int client_stubs::<#=member#> = <#=class_members[member]#>;
<#
}
#>Common.t4
<#@ template language="C#" #>
<#@ import namespace="System.Collections.Generic" #>
Dictionary<string, string> class_members = new Dictionary() {
{"m_first", "1"},
{"m_second", "2"}
};https://stackoverflow.com/questions/19987249
复制相似问题