File 将T4模板输出复制到新文件

File 将T4模板输出复制到新文件,file,copy,t4,File,Copy,T4,我正在尝试使用T4模板,使为我们的系统生成迁移稍微容易一些。有一件事我不太清楚(这让我怀疑我是否使用T4模板做了错误的事情),那就是如何将渲染输出复制到新文件。我可以手动创建一个文件并复制生成的文件的内容,但这种做法违背了我在这里的“让事情变得更简单”的精神 这是我的模板。渲染时,理想情况下会将其复制到同一目录中的“62 CreateWidgetsTable.cs”。目标是有一个我现在可以编辑的文件(我正在生成一个模板,换句话说,不是生成完整的文件)。如果我可以在VS中重命名生成的文件(然后让t

我正在尝试使用T4模板,使为我们的系统生成迁移稍微容易一些。有一件事我不太清楚(这让我怀疑我是否使用T4模板做了错误的事情),那就是如何将渲染输出复制到新文件。我可以手动创建一个文件并复制生成的文件的内容,但这种做法违背了我在这里的“让事情变得更简单”的精神

这是我的模板。渲染时,理想情况下会将其复制到同一目录中的“62 CreateWidgetsTable.cs”。目标是有一个我现在可以编辑的文件(我正在生成一个模板,换句话说,不是生成完整的文件)。如果我可以在VS中重命名生成的文件(然后让t4生成一个新模板,它将一直放在那里,直到有人来使用它),那就足够了


使用制度;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用Migrator.Framework;
命名空间WidgetsIntl.Console.Migrations
{
[迁移()]
公共类:迁移
{
公共覆盖作废()
{
}
公共覆盖无效向下()
{
}
}
}

在一些项目中,我使用下面的文件管理器类allready。这是一个基于以下博客文章的定制实现:


好吧,我想出了两种方法。最简单的方法(我只是在按照我将要向您展示的方式进行操作后才发现)是:。关键信息是
GenerationEnvironment
是一个
StringBuilder
,其中包含运行模板的结果,因此您可以将该结果写入任何您想要的旧文件

另一种方法是使用。去下载吧

然后,您可以创建一个模板,该模板创建一个类,该类扩展了覆盖某些默认行为的
template
(由T4工具箱定义):


公共课
{ 
公开作废法()
{
返回“你好,我是”;
}
}

我发现,在没有插件的情况下,最简单的方法是右键单击目标项目,进入“添加->现有项”,然后选择生成的文件。这将在项目的根目录下为您创建文件的副本,然后您可以根据需要移动该副本。这使您可以轻松地将生成的文件传输到项目中,而不是在其中生成文件的项目中


我还没有测试过当.tt文件本身位于项目根目录中时会发生什么情况,但只要.tt位于子文件夹中,这种方法就肯定有效(这可能是一种很好的做法)

我的回答不包括你的问题吗?本!我会尽快尝试一下。这周我很忙,所以我还没有看这个。不过我会的!嘿,对不起,本,我找到了一个比你建议的简单得多的方法。谢谢你的帮助!