你使用T4的目的是什么?

28

T4已经存在于Visual Studio中多年,但并没有得到足够的关注。 然而,对于那些了解它的人来说,似乎有一些非常创造性和有用的用途。

我正在研究T4的不同用法,我很想听听您如何在实际生活场景中使用它。我主要感兴趣的是非标准和创意使用。

一些有趣的例子:

  1. Phil Haack使用T4 从.less文件创建静态CSS文件
  2. 使用T4模板生成WPF和Silverlight依赖属性,具体方法请参见此处

注意:我知道这是一个讨论型问题,但答案可能对其他人有帮助。 我将其标记为主观问题,并标记为“社区wiki”,请让问题保持开放状态。谢谢!


2
哈哈,Phil Haack 的网站正在显示 [ASP.NET] 死亡的黄屏。 - Igor Zevaka
9个回答

8

我不太喜欢app.config/web.config文件中字符串的冗长性,因此我使用T4来读取这些文件,并创建一个AppSettings/WebSettings类,将连接字符串和键/值包装在真正的类中。这意味着只要我始终使用AppSettings.SomeValue来引用我的app.config,我就可以获得编译时检查,这是非常好的。


好的,你有那个T4模板可以分享吗? - Stéphane

4
我曾使用sharp-architecture中的T4模板生成了从模型到控制器再到基础视图的所有内容。
即使你只是想看一些T4模板高级示例,也值得一试。

1
链接已损坏,现在重定向到欺诈广告,答案不再有用。 - Jose V

4
我使用T4:
  1. 生成SQL Server和Oracle的CRUD脚本。
  2. 基于数据库模式,生成数据访问层。
  3. 基于数据库模式,生成业务逻辑层。
  4. 基于数据库模式(脚手架),生成ASP.Net WebForms,包括HTML和Codebehind。
这为我的项目提供了一个良好、快速、简单、基础的起点。
最棒的是我有控制权。 您可以在此处下载我的模板示例

2
SubSonic 3.0 在生成实体代码时大量使用 T4 模板。它会在数据库连接上调用 GetSchema() 并将找到的每个表格运行通过 T4 实体模板。使用 T4 的好处在于,如果您不喜欢它处理数据库架构的方式,只需编辑模板即可。
我已经调整了 T4,以更好地处理 MySQL 数据库,因为我使用了许多 tinyint 列,而默认的 T4 将其映射到 byte 类型。对 T4 进行快速编辑后,我得到了我想要的类型,适用于我的应用程序实体。

如果你真的很擅长,你可以让它支持原本不支持的数据库。我只通过编辑模板文件就将SubSonic部分移植到了PostgreSQL。 - Earlz

2

LINQ to SQL模板的T4
http://l2st4.codeplex.com/

这些模板复制了SQLMetal和LINQ to SQL类设计器代码生成器的功能,适用于C#和VB.Net,仅需要Visual Studio 2008。


我正在考虑将我的代码转换为使用这些模板。有人有关于使用l2st4的推荐资源或一些鼓励的话吗? - jpierson

2

2

我使用T4生成了以下内容:

  • 代理(设计时,用于在特定公开API中注入/包装监视代码/日志记录等)。
  • 一对一接口/类映射的接口生成
  • 通过“直接/实际”调用代码替换反射代码(反射代码的维护优势,但具有实际代码的性能),例如通过索引器访问属性或类似方向的内容。
  • 为Java项目生成XML(找不到易于在公司内部共享的类似T4的java解决方案,因为T4易于构建并且可以从命令行运行)
  • 从主数据库生成枚举类型(我们为Delphi代码库和.Net代码库都生成了它们)

1

T4模板在Web服务软件工厂(服务工厂)中被广泛使用。


1

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