4

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

我什至为 Visual Studio 2015扩展安装了 T4 工具箱,但tt模板没有转换。

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

更新

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

4

3 回答 3

7

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

于 2015-07-22T20:41:18.733 回答
3

我发现在使用 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 并正常构建。

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

于 2015-12-03T19:30:51.450 回答
1

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

于 2015-07-22T13:03:51.803 回答