【问题标题】:Run T4 programmatically以编程方式运行 T4
【发布时间】:2017-08-24 14:48:09
【问题描述】:

我正在尝试使用 T4 生成代码,但我无法使用 net 3.5 以编程方式运行我的 TextTemplate。

所有应该解释如何做的链接都死了 This This

通过保存 TextTemplate 生成代码文件按预期工作。

【问题讨论】:

  • 备用位置:C:\Program Files (x86)\Common Files\microsoft shared\TextTemplating\14.0
  • @RandRandom 答案中的实际链接不起作用。有 4 个赞的帖子希望用户安装一些东西,如果我希望这代人独立工作,这不是一个选项。
  • 很有可能不需要安装,.exe 可以独立运行。将其包含到您的项目中(复制和粘贴)并与您的应用一起发布/共享/安装。
  • 如果您在构建项目或解决方案时需要运行 T4,您应该寻找 AutoT4

标签: c# t4 programmatically


【解决方案1】:

根据您的 cmets。

我已经测试了该方法并执行了以下操作:

TextTransform.exe 添加到您的项目文件中 (使用添加现有项目,将其复制并粘贴到您的项目文件夹中,然后引用它,或者其他任何方式)

新建一个.tt文件,我的有以下内容

<#@ template debug="false" hostspecific="false" language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ output extension=".txt" #>
<#
var dateTimeNow = DateTime.Now.ToString();
#>
<#=dateTimeNow#>

(将生成一个简单的 .txt 文件,其中包含 DateTime 以查看其是否正常工作)

在其属性 Copy to Output Directory 中将两个文件 - TextTemplate1.tt and TextTransform.exe - 声明为 Copy always

现在在某处有下面的代码,我在Main做的

static void Main(string[] args)
{
    File.Delete("TextTemplate1.txt"); //delete the existing file, to make sure the code does what its supposed to do
    Thread.Sleep(1000); //wait for filesystem to do its job

    var proc = new Process
    {
        StartInfo =
        {
            FileName = "TextTransform.exe",
            Arguments = "TextTemplate1.tt"
        }
    };

    proc.Start();
    proc.WaitForExit();
}

(删除了路径,因此它相对于正在执行的 .exe - 需要在同一目录中)

你应该成功地得到这个输出

一切正常,需要更多信息来帮助您找到问题。

我的 TextTransform.exe 文件:

【讨论】:

  • 我试图找出发生了什么。我确实喜欢你在你的例子中提出的,我被抛出了这个异常 pastebin.com/t8Wq5gnu 。当我从visual studio项目中排除exe时,当我再次运行它时,它闪烁cmd并退出程序。我的 TextTransform.exe 有问题吗?
  • @Ronijo 检查您的路径,异常清楚地显示The system cannot find the file specified,使用您知道文件所在位置的完整路径。
  • @Ronijo Could there be something wrong with my TextTransform.exe? - 怀疑
  • 我尝试指定完整路径,甚至在命令行上尝试了 TextTransform 并得到回复“错误:调用目标已引发异常。”。我确保我按照示例中的方式做了所有事情,但什么也没做。我真的不明白出了什么问题。
  • 你能分享一个简单的项目,上传到哪里吗?仅供参考,我只在线一个小时,而不是周末离开。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-08
  • 2011-08-16
  • 1970-01-01
  • 1970-01-01
  • 2019-04-01
  • 2014-08-19
  • 2021-03-11
相关资源
最近更新 更多