2011-05-13 44 views
4

我正在构建一个NuGet包,它将一些T4模板传送到CodeTemplates目录中。当我安装NuGet软件包时,T4模板都将“自定义工具”属性设置为“TextTemplatingFileGenerator”。这是不对的。NuGet - T4安装后文件属性不同

我知道我可以通过改变我的注册表来禁用这个功能,以便不用这种方式添加新的T4模板,但是由于这是一个NuGet软件包,这不是一个选项。

我已经看过PowerShell,但是我很难理解我将如何实现我的目标。

我已经看过了的.csproj文件的XML,发现这个:

<None Include="CodeTemplates\AddController\Controller.tt"> 
    <Generator>TextTemplatingFileGenerator</Generator> 
    <LastGenOutput>Controller.cs</LastGenOutput> 
</None> 

如果我从这个节点删除“TextTemplatingFileGenerator”,那么该文件将工作,我的愿望。

我应该从哪里出发?

回答

4

我不确定有一个很好的方法来做到这一点。在博客中,David Ebbo wrote

一个我会提到这个 模型最后一件事是,.TT文件通常 不是你的项目的一部分。相反,它 住在其他地方,只有它的 输出成为您的项目的一部分。 那么,在技术上,该.TT文件可以在你的项目中,以方便编辑 ,但 那么你必须删除 “TextTemplatingFileGenerator”定制 工具,因为你真的不希望它 对自己的执行(它肯定会自定义主机 失败)。

这听起来像是Visual Studio在将.tt文件添加到项目时的行为。

这就是说,Scott Hanselman's AddMvc3ToWebForms使得在的csproj文件中的一些变化的GUID添加MVC功能(添加控制器/添加视图等),因此有可能,你可以做一些类似他的代码的东西,删除的Generator节你的包中的文件并重新加载项目?

+0

这听起来像你对问题的一些知识,但是这并不能真正解决我的问题。我绝对希望将T4模板作为项目的一部分。这是我知道重写MVC中的默认视图和控制器模板的唯一方法。另外我还有一些其他的模板,我想住在项目中。 – 2011-05-16 14:03:45

+0

我不认为有一种很好的方式来做你想做的事情,在VS添加后自动化VS来改变类型。 AddMvc3ToWebForms包处理项目文件以更改GUID - 也许您可以做类似的操作,以针对添加的每个文件更改自定义工具? – 2011-05-16 14:20:11

+0

是的,那可能是我会做的。我希望有人可以帮助。 – 2011-05-16 15:24:05

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 = "" 
+1

我没有试过这个,因为我现在还没有处理这个问题多年,但我很高兴有人跟进了一些可能有用的东西。这是一个令人沮丧的问题。 – 2017-01-17 22:17:39