我正在构建一个NuGet包,它将一些T4模板提供到CodeTemplates目录中。当我安装NuGet包时,T4模板都将Custom Tool属性设置为“TextTemplatingFileGenerator”。这不对。
我知道我可以通过更改我的注册表来禁用它,这样就不会以这种方式添加新的T4模板,但由于这是一个NuGet包,所以这不是一个选项。
我已经研究过PowerShell,但是我无法理解为实现目标我会做些什么。
我查看了.csproj文件xml,发现了这个:
<None Include="CodeTemplates\AddController\Controller.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>Controller.cs</LastGenOutput>
</None>
如果我从此节点中删除“TextTemplatingFileGenerator”,那么该文件将按照我的意愿运行。
我应该从哪里离开?
答案 0 :(得分:4)
我不确定这是一个很好的方法。在博文中,David Ebbo wrote:
我要提到的最后一件事 model是.tt文件正常 不属于你的项目。相反,它 生活在别的地方,只有它的 输出成为项目的一部分。 嗯,从技术上讲,.tt文件可以 在您的项目中,以便于编辑,但是 然后你必须删除 'TextTemplatingFileGenerator'自定义 工具,因为你真的不想要它 自己执行(肯定会 自定义主机失败。
这使得当将.tt文件添加到项目时,这听起来像是Visual Studio行为。
也就是说,Scott Hanselman's AddMvc3ToWebForms对csproj文件中的GUID进行了一些更改,以添加MVC功能(添加控制器/添加视图等),因此您可以执行与其代码类似的操作并删除您的包中的文件的Generator
部分并重新加载项目?
答案 1 :(得分:2)
我遇到了同样的问题,我使用“install.ps1”解决了这个问题,每次安装或更新nuget软件包时都会执行该软件。
您的install.ps1应如下所示:
param($installPath, $toolsPath, $package, $project)
$addControllerFolder = $project.ProjectItems.Item("CodeTemplates").ProjectItems.Item("AddController")
$addControllerFolder.ProjectItems.Item("Controller.tt").Properties.Item("CustomTool").Value = ""