NuGet - T4 安装后文件属性不同
本文关键字:文件属性 安装 T4 NuGet | 更新日期: 2023-09-27 17:56:28
我正在构建一个 NuGet 包,该包将一些 T4 模板传递到 CodeTemplates 目录中。安装 NuGet 包时,T4 模板都将自定义工具属性设置为"文本模板文件生成器"。这是不对的。
我知道我可以通过更改注册表来禁用此功能,以便不会以这种方式添加新的 T4 模板,但由于这是一个 NuGet 包,因此不是一个选项。
我已经研究了PowerShell,但我很难理解我会做些什么来实现我的目标。
我查看了 .csproj 文件 xml 并发现:
<None Include="CodeTemplates'AddController'Controller.tt">
<Generator>TextTemplatingFileGenerator</Generator>
<LastGenOutput>Controller.cs</LastGenOutput>
</None>
如果我从此节点中删除"文本模板文件生成器",则该文件将按我的意愿工作。
我应该从这里去哪里?
我不确定有什么好方法可以做到这一点。在一篇博客文章中,David Ebbo写道:
关于这一点,我要提到的最后一件事 模型是 .tt 文件通常是 不是项目的一部分。 相反,它 住在别的地方,只有它的 输出将成为项目的一部分。 好吧,从技术上讲,.tt文件可以是 在您的项目中以便于编辑,但是 然后,您必须删除 "文本模板文件生成器"自定义 工具,因为你真的不想要它 自行执行(它肯定会 自定义主机失败)。
这听起来像是将.tt文件添加到项目时的Visual Studio行为。
也就是说,Scott Hanselman 的 AddMvc3ToWebForms 对 csproj 文件中的 GUID 进行了一些更改以添加 MVC 功能(添加控制器/添加视图等),因此您可以执行类似于他的代码并删除包中文件的Generator
部分并重新加载项目?
我遇到了同样的问题,我使用"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 = ""