【问题标题】:Design-time T4 templates in ASP.NET 5 (VS 2015)ASP.NET 5 (VS 2015) 中的设计时 T4 模板
【发布时间】:2015-07-22 12:46:30
【问题描述】:

我似乎无法在 ASP.NET 5 (vNext) 项目中找到在 VS 2015 RTM 中制作 T4 模板的方法。

我什至安装了T4 toolbox for Visual Studio 2015 扩展,但tt 模板没有转换。

Custom Tool 属性没有出现在tt 文件属性中,我也找不到'运行自定义工具'命令。

更新

我想要 T4 模板的原因是引入了 config.json 文件和可插拔的配置系统,这是一件很棒的事情,但代价是没有设置属性强类型。
我已阅读 this 文章,其中解释了如何实现这一点,但仍然没有生成。因为我有一个相当复杂的配置结构,所以我想制作一个 T4 模板来生成一个AppSettings 文件。显然也欢迎任何关于这方面的想法。

【问题讨论】:

    标签: t4 visual-studio-2015 asp.net-core asp.net-core-mvc project.json


    【解决方案1】:

    ASP.Net 5 (vnext) 项目是一种全新的动物,在技术上仍处于测试阶段,而不是 scheduled for RC til November 2015。此外,它还试图完全跨平台,因此团队最初倾向于使用 razor 模板而不是 T4 来搭建脚手架。他们根本没有计划支持 T4(或任何单个文件生成器),直到 out cry from the community 让他们改变主意。根据该线程,他们将支持它,但没有给出日期。他们似乎确实取得了进展,早在 1 月份,当我测试我的 T4 extension 时,我遇到了项目文件(现在为 json 格式)不支持自定义属性的问题,但截至 2015 年 7 月 20 日发布时,它似乎在工作,在忙。在 Visual Studio 2015 中运行 T4 的引擎仍然存在,因此如果您喜欢其他项目类型,可以使用它。您可以创建一个控制台应用程序并让它存储 T4 文件,但在 vnext 项目中生成它们。如果你想要一个更简洁的解决方案,你也可以试试我的扩展程序T4 Awesome,它为你提供了一种通过右键菜单组织和调用模板的方法。

    【讨论】:

    • 作为“从社区中大声疾呼”的主要人物之一,我鼓励人们在对反馈做出反应时与 ASP.Net 团队互动,并且他们收到的越多,最终产品会越好。
    • 我在项目中添加了一个可以使用 t4 的控制台应用程序,然后使用构建后事件复制生成的 CS 文件。
    • asp.net 5 类库包似乎支持 T4,但是如果 t4 模板将文件添加到这些项目之一,它似乎会挂起 Visual Studio 2015。看起来我可能需要尝试 Clays接近。
    【解决方案2】:

    我发现在使用 ASP.NET 5 RC1 构建 ASP.NET 5 项目时,我仍然可以使用 Modeling SDK for Microsoft Visual Studio 2015 附带的 MSBuild 目标。

    我是通过修改路线到达那里的 MSDN - Code Generation in a Build Process.

    1. 将 *.tt 和输出文件(在我的例子中为 *.cs)添加到项目文件夹结构中。
    2. 卸载并编辑项目的 *.xproj 文件。
    3. 在 Microsoft.DNX.targets 导入后添加以下 Import 元素:

      <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TextTemplating\Microsoft.TextTemplating.targets" />
      
    4. 添加一个类似于以下的 ItemGroup 元素(我在 import 语句之前添加了这个):

      <ItemGroup>
        <Content Include="MyTemplate.tt">
          <Generator>TextTemplatingFileGenerator</Generator>
          <LastGenOutput>MyTemplate.cs</LastGenOutput>
        </Content>
      </ItemGroup>
      
    5. 您可以选择将元素添加到 Globals PropertyGroup 元素以控制转换任务:

      <TransformOnBuild>true</TransformOnBuild>
      <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
      <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
      
    6. 重新加载项目的 *.xproj 并正常构建。

    我使用的模板非常简单,因此我可能会错过这种方法的局限性。

    【讨论】:

      【解决方案3】:

      如果您观看 Julie Lerman 的复数视频:http://www.pluralsight.com/courses/entity-framework-7-looking-ahead,她会解决这个问题。到目前为止,还没有计划在即将发布的 Visual Studio 版本中删除 T4 模板,但它们并没有在发布中加入。您的代码总是在您的数据库上运行逆向工程工具,并采用代码优先的方法,然后再切换回来(尽管我不知道您为什么会这样)但这将是一种解决方法,直到有更多关于当前 VS 版本中的 T4 模板。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-04-05
        • 2012-01-23
        相关资源
        最近更新 更多