【问题标题】:NuGet - T4 File properties are different after installedNuGet - 安装后 T4 文件属性不同
【发布时间】:2014-10-15 19:23:45
【问题描述】:

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

我知道我可以通过更改我的注册表来禁用它,这样就不会以这种方式添加新的 T4 模板,但由于这是一个 NuGet 包,所以这不是一个选项。

我已经研究过 PowerShell,但我无法理解如何实现我的目标。

我查看了 .csproj 文件 xml 并发现了这个:

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

如果我从该节点中删除“TextTemplatingFileGenerator”,那么该文件将按我的意愿工作。

我应该从这里去哪里?

【问题讨论】:

    标签: c# .net t4 nuget


    【解决方案1】:

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

    关于这个我要提到的最后一件事 模型是.tt文件通常是 不属于您的项目。相反,它 住在别处,只有它 输出成为您项目的一部分。 好吧,从技术上讲,.tt 文件可以 在您的项目中以便于编辑,但是 然后你必须删除 'TextTemplatingFileGenerator' 自定义 工具,因为你真的不想要它 自行执行(它肯定会 自定义主机失败)。

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

    也就是说,Scott Hanselman's AddMvc3ToWebForms 对 csproj 文件中的 GUID 进行了一些更改以添加 MVC 功能(添加控制器/添加视图等),因此您可以执行与他的代码类似的操作并删除 @987654323 @ 部分中的文件并重新加载项目?

    【讨论】:

    • 听起来您对该主题有所了解,但这并不能真正解决我的问题。我绝对希望将 T4 模板保留为项目的一部分。这是我所知道的在 MVC 中覆盖默认视图和控制器模板的唯一方法。另外,除了这些我想在项目中使用的模板之外,我还有一些其他模板。
    • 我不认为有一个很好的方法来做你想做的事,除了在添加类型后自动化 VS 来更改类型。 AddMvc3ToWebForms 包操作项目文件以更改 GUID - 也许您可以执行类似的操作来针对您添加的每个文件更改自定义工具?
    • 是的,这可能就是我要做的。我希望有人能帮忙。
    【解决方案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 = ""
    

    【讨论】:

    • 我没有尝试过这个,因为我已经很多年没有处理这个问题了,但是我很高兴有人跟进了一些可能有用的东西。这是一个令人沮丧的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-15
    • 2022-09-24
    • 2016-12-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多