NuGet - T4文件属性在安装后有所不同

时间:2011-05-13 20:07:46

标签: c# .net t4 nuget

我正在构建一个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”,那么该文件将按照我的意愿运行。

我应该从哪里离开?

2 个答案:

答案 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 = ""