T4”;头部防护装置”;对于包含的文件

本文关键字:于包含 文件 头部 T4 装置 | 更新日期: 2023-09-27 17:57:38

我正在尝试为代码生成编写一些漂亮且结构化的t4。我将逻辑分解为可重用的函数,并将它们放入单独的文件中(就像"正常"代码一样)。问题是我不能包含一个通用文件,因为它将被包含多次。

例如,我有4个文件:Core.ttFile1.ttFile2.ttMainTemplate.tt。CCD_ 5包含在CCD_ 6和CCD_。而File1.ttFile2.tt包含在MainTemplate.tt

当我想从MainTemplate.tt生成输出时,我得到以下错误:

Error   8   Compiling transformation: The type 'Microsoft.VisualStudio.TextTemplating62CD98C8FF0EB737CAFBD5ED17A158C3.GeneratedTextTransformation' already contains a definition for 'PropertyAttribute'

我想,原因是Core.tt已经被包含了两次。我的问题有解决办法吗?在c++中,可以添加标头保护:#ifndef xxx #define xxx #endif

T4”;头部防护装置”;对于包含的文件

是的,此功能内置于T4系统中。

T4"include"指令支持"once"属性,该属性应确保模板只包含一次,以防止重复。

示例:

<#@ include file="filePath.tt" once="true" #>

不幸的是,我还没能找到一种方法来实现这一点,因为在C#中使用#define的地方有很大的限制,而且#include在代码中出现得太晚了。

在这一点上,您最好的选择是在上记录功能请求http://visualstudio.uservoice.com试着争取一些支持。

就我个人而言,我很想把这个功能融入到产品中。

我遇到了类似的问题,出现了以下错误消息:

Compiling transformation: The type 'GeneratedTextTransformation' already contains a definition for 'BaseCodegenTemplate'

我用CTRL+SHIFT+F

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

并且在2个不同的文件中发现了该行的2次出现。在我从其中一个文件中删除其中一个事件后,错误消失了。

但是,由于该文件中现在缺少BaseCodegenTemplate.tt文件的include语句,因此该文件中的某些代码将用红色突出显示,因为缺少BaseCodegenTemplate.tt中包含的类型定义。但总体代码编译得很好:在构建过程中包括了BaseCodegenTemplate.tt中定义的类型,因为在另一个文件中引用了BaseCodegenTemplate.tt。