ASP.NET 5(VS 2015)中的设计时T4模板

4

我无法找到在ASP.NET 5(vNext)项目中使用VS 2015 RTM创建T4模板的方法。

我甚至安装了Visual Studio 2015的T4工具箱扩展程序,但tt模板未被转换。

Custom Tool属性未出现在tt文件属性中,也无法找到“运行自定义工具”命令。

更新

我想要T4模板的原因是引入了config.json文件和可插拔配置系统,这是一个很棒的功能,但代价是没有强类型的设置属性。
我阅读了这篇文章,介绍了如何实现这一点,但仍然没有生成。由于我的配置结构相当复杂,我考虑制作一个T4模板来生成一个AppSettings文件。对此的任何想法都是受欢迎的。

3个回答

7

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

作为“社区呼声”的主要发起人之一,我鼓励大家积极参与 ASP.Net 团队的工作,因为他们会对反馈做出回应,而且收到的反馈越多,最终产品就会越好。 - dmcquiggin
1
我向项目中添加了一个控制台应用程序,它可以使用t4,然后使用后期生成事件来复制生成的CS文件。 - Clay Smith
似乎在asp.net 5类库包中支持T4,但是如果T4模板将文件添加到这些项目中,似乎会使Visual Studio 2015挂起。看起来我可能需要尝试Clay的方法。 - Mark Redman

3
我发现在使用ASP.NET 5 RC1构建项目时,仍然可以使用Microsoft Visual Studio 2015 Modeling SDK附带的MSBuild目标。我通过修改MSDN - Code Generation in a Build Process中的说明达到了这个目的。
  1. Add the *.tt and the output files (*.cs in my case) to the project folder structure.
  2. Unload and edit the project's *.xproj file.
  3. Add the following Import element after the Microsoft.DNX.targets import:

    <Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TextTemplating\Microsoft.TextTemplating.targets" />
    
  4. Add an ItemGroup element similar to the following (I added this immediately before the import statements):

    <ItemGroup>
      <Content Include="MyTemplate.tt">
        <Generator>TextTemplatingFileGenerator</Generator>
        <LastGenOutput>MyTemplate.cs</LastGenOutput>
      </Content>
    </ItemGroup>
    
  5. Optionally, you can add elements to the Globals PropertyGroup element to control the transformation task:

    <TransformOnBuild>true</TransformOnBuild>
    <TransformOutOfDateOnly>false</TransformOutOfDateOnly>
    <OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
    
  6. Reload the project's *.xproj and build normally.

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

1

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接