首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >T4:只有扩展名不同的输出文件名

T4:只有扩展名不同的输出文件名
EN

Stack Overflow用户
提问于 2013-11-14 20:02:39
回答 3查看 2.5K关注 0票数 2

我们有一个.cs文件和一个.vb文件,它们都以各自的语言链接到几十个项目中,以提供公共的程序集信息。我希望在T4中设置它们之间的共同方面,方法是将每个方面移到一个模板中。

AssemblyInfo.csAssemblyInfo.vb应该是输出文件名。但是,我知道,通常情况下,其中任何一个的T4模板都将被命名为AssemblyInfo.tt

由于我显然不能有两个名称完全相同的T4模板,我如何输出两个仅通过扩展名不同的文件?

我不能重新命名要写的文件,而不把它们从许多不同的项目中删除,然后不得不重新链接它们,所以这是不可能的。

是否有某种指令可以用于手动指定输出文件名,以便模板可以有不同的名称?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-11-14 20:17:45

默认情况下,一个T4模板不可能有多个输出文件。但是有一些实现为您提供了这种可能性。例如,如果您正在使用有形的T4编辑器,它们将提供一个免费的模板库,其中包含一个名为“TemplatelFileManagerV2.1”的可包含模板。在T4模板中引用这一点可以生成多个输出文件,甚至在解决方案的不同项目中也是如此。

这是如何对你起作用的:

代码语言:javascript
运行
复制
    <#@ 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模板中使用两种不同的输出语言。因此语法高亮显示会被弄乱.

希望这有帮助

票数 1
EN

Stack Overflow用户

发布于 2015-03-25 16:51:05

只需将更多的.ttN文件放在同一个目录中即可。并规范每个.ttN文件中的扩展名:

代码语言:javascript
运行
复制
AppResources.tt     <#@ output extension=".resx" #>
AppResources.tt2    <#@ output extension=".de.resx" #>
AppResources.tt3    <#@ output extension=".nl.resx" #>
票数 0
EN

Stack Overflow用户

发布于 2015-04-28 23:46:53

比所有这些都简单得多。只需将.tt附加到所需的文件名并使用:

代码语言:javascript
运行
复制
<#@ output extension=""#> 

client_stubs.h.tt

代码语言:javascript
运行
复制
<#@ 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

代码语言:javascript
运行
复制
<#@ 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

代码语言:javascript
运行
复制
<#@ template language="C#" #>
<#@ import namespace="System.Collections.Generic" #>
Dictionary<string, string> class_members = new Dictionary() {
    {"m_first", "1"},
    {"m_second", "2"}
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19987249

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档