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>

如果我从此节点中删除"文本模板文件生成器",则该文件将按我的意愿工作。

我应该从这里去哪里?

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

我不确定有什么好方法可以做到这一点。在一篇博客文章中,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 = ""