我使用TextTransform.exe
生成多个C ++文件。由于该工具不直接在Visual Studio for C ++项目中支持,因此我通过命令行(inspired by T4 Generating C++ Code)调用它。
为了生成多个文件,我使用https://github.com/areve/Entity-Framework-T4-Templates/blob/master/src/dev/MultiOutput.tt,这就是为什么我不需要工具生成的标准输出。
我称之为TextTransform.exe
:
"C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\14.0\TextTransform.exe"
-out "<what to put here that NO file is generated?>"
C:\Test.tt
我正在使用Microsoft Windows。也许有一个&#34; hack&#34;提供任何可以被程序接受的特殊字符,但是不可能实际创建一个文件。
执行此命令时是否有可能提供任何生成NO文件的命令?
更新
如@ImprobabilityCast所述,使用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.
我达到了我想要的水平,但事实并非如此&#34;很好&#34;构建操作失败。
答案 0 :(得分:6)
不确定为什么你不想要文件,但是......
在linux中,我们有一个名为/dev/null
的奇妙事物,对于像这样的事情来说,它本质上是一个空洞的空洞。我做了一个快速搜索,Windows让它拥有它的等效性:NUL
因此,您想要的命令是:
"C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\14.0\
TextTransform.exe" -out NUL C:\Test.tt
答案 1 :(得分:1)
没有。构建文本转换的方式只被认为是生成单个输出文件。多输出是T4模板的逻辑演变,但微软多年来一直没有进化过它。
您正在使用的代码(就像我一样)基本上是一个黑客。它使用一种非常丑陋的方式使用EnvDTE来操纵项目系统,当MS决定重写该系统时,可能最终无法正常工作(并且有人可能会认为那一天即将到来)。
例如,T4编辑器实现相同的方法略有不同,但您可以看到输出仍然生成&#34;虚拟文件&#34;:答案 2 :(得分:0)
我找到了一个令人满意的解决方案来解决我的问题。由于Microsoft Visual Studio允许自定义构建工具进入多行,我意识到我可以删除由我不需要的TextTransform.exe生成的文件。
所以我在“命令行”中输入的命令现在包含 two
行:
"C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\14.0\TextTransform.exe" -out "%(DefiningProjectDirectory)$(TempOutputFile)" C:\Test.tt
DEL /F "%(DefiningProjectDirectory)$(TempOutputFile)"
此命令需要项目变量calles“TempOutputFile”。通过这种方式,我跳过任何拼写错误。例如:
<PropertyGroup Label="Globals">
<TempOutputFile>DoNotCheckin.h</TempOutputFile>
</PropertyGroup>