C 变换T4模板忽略输出文件

  • 本文关键字:输出 文件 变换 T4 t4
  • 更新时间 :
  • 英文 :


我正在使用TextTransform.exe生成多个C 文件。由于该工具在Visual Studio中不受C 项目的直接支持,因此我称其为命令行(灵感来自T4生成C 代码)。

为了生成多个文件,我使用https://github.com/areve/entity-framework-t4-templates/blob/master/src/dev/multioutput.tt,这就是为什么我不需要标准输出该工具正常生成。

我称TextTransform.exe为:

"C:Program Files (x86)Common Filesmicrosoft sharedTextTemplating14.0TextTransform.exe"
-out "<what to put here that NO file is generated?>"
C:Test.tt

我正在使用Microsoft Windows。也许有一个"黑客"提供任何类型的特殊字符,该程序将被程序所接受,但实际上无法从中创建一个文件。

有可能提供任何命令,该命令在我执行此命令时不会生成文件?


update

@improbability cast使用NUL提到的是一种方法。它不是生成任何文件,而是我运行tt文件的自定义构建失败了:

Performing Custom Build Tools
CUSTOMBUILD : error : FileStream will not open Win32 devices such as disk partitions and tape drives. Avoid use of "\." in the path.

我达到了我想要的东西,但不是那么"好",以至于构建动作失败了。

不确定为什么您不想要文件,但是...

在Linux中,我们有一个名为/dev/null的奇妙的东西,它本质上是一个空的空白,仅适用于这样的东西。我进行了快速搜索,Windows具有自己的equivilent: NUL

因此,您想要的命令是:

"C:Program Files (x86)Common Filesmicrosoft sharedTextTemplating14.0
TextTransform.exe" -out NUL C:Test.tt

no。构建文本转换的方式仅被认为产生一个单个输出文件。多输出是T4模板的逻辑演变,但Microsoft多年来一直没有进化。

您正在使用的代码(就像我一样)基本上是围绕它的黑客攻击。它使用一种非常丑陋的方式来使用Envdte来操纵项目系统,这可能最终无法正常工作,当时MS决定重写该系统(并且有人可能会争辩说这一天即将到来)。

例如

http://t4-editor.tangible-engineering.com/blog/how-to-generate-multiple-files-files-from-a-a-single-t4-template.html

我找到了一个满足我问题的解决方案。由于Microsoft Visual Studio允许自定义构建工具输入多行,因此我意识到我可以删除TextTransform.exe生成的文件。

所以我将命令放入"命令行"中包含 two Link现在:

"C:Program Files (x86)Common Filesmicrosoft sharedTextTemplating14.0TextTransform.exe" -out "%(DefiningProjectDirectory)$(TempOutputFile)" C:Test.tt
DEL /F "%(DefiningProjectDirectory)$(TempOutputFile)"
  1. 第一行是实际的TextTransform调用,它会生成我想要的所有文件,包括我不需要但不能停止创建的输出文件。
  2. 第二行只是删除了我不需要的文件。

此命令期望一个项目变量呼叫" tempoutputfile"。这样,我跳过任何错字。例如:

<PropertyGroup Label="Globals">
  <TempOutputFile>DoNotCheckin.h</TempOutputFile>
</PropertyGroup>

最新更新