2010-03-29 37 views
17

我在过去的2年中一直在使用CodeSmith,并且喜欢它为我做的。不过,我也知道T4内置于Visual Studio中,可以做一些非常酷的东西。基于与VS2010中的朋友T4的对话,T4将会更好。Visual Studio T4 vs CodeSmith

所以问题是:我继续乘坐CodeSmith巴士还是开始将所有模板转换为T4?

更新 也许我不清楚问题的方式。显然,我不会删除我的cs模板,并停止使用它们,直到我有新的模板工作。但是,这一点甚至值得付出努力? T4在这一点上是否比CodeSmith提供了一个完整的优势?是否有一些功能或一组功能可以通过为T4编写我的模板,而我的效率会提高100倍?

+0

回答你的更新:不,T4比CodeSmith没有任何优势,除了包含在VS2008及更高版本中,因此对VS用户是“免费”的。 – 2010-03-29 18:38:47

回答

24

我感到非常激动和兴奋,T4,并试图以我所有的CodeSmith的东西转换为T4 - 只有学习有相当多的事情是错与T4 /缺乏。

  • 为参数模板不支持 - 你需要硬编码到一切你的模板.....
  • 为T4在Visual Studio主机是相当有限的
  • 对于没有直接和易于支持从单一的模板

退房凯瑟琳多拉德的What Wrong with T4博客帖子多个输出文件 - 她几乎是代码生成的.NET的女王,她概括起来非常漂亮 - 我完全同意100%与她的问题。总而言之,在大量玩弄和尝试之后,我已经基本上放弃了T4--它还没有准备好黄金时段,至少不是我正在使用的模板类型(主要是检查数据库表提取值,例如作为自制ORM的基础,或者从数据库中提取常量和配置设置等)

并且从在VS2010中使用T4进行试验,我不确定它有多少固定,真的......并不是很多,看来。还有一些其他有趣的概念(preprocessed templates,据说support for parameters等),但大多数的基本缺陷仍似乎萦绕.....

因此,现在:不要扔掉CodeSmith!也许T4在VS2016将是多么强大....但在那之前.....

资源:

+0

谢谢。这更符合我所寻找的内容。作为一个例子,我有一个模板,它为我的Entity Framework edmx文件中的所有类生成partials。所以能够在模板之间传递参数是必须的。能够从1个模板生成更多的1个文件也是非常好的。 – Jake 2010-03-29 14:57:41

+0

@Jake:如果你已经在VS中使用了你的东西(比如在你的EDMX文件中),你可以用T4做很多很酷的事情,因为它可以轻松解析组成EDMX的XML。另外,使用Oleg Sych的T4Toolbox,你可以从一个模板输出多于一个的文件 - 它只是远不如应该的那么简单..... – 2010-03-29 15:02:18

+0

T4只是.NET,你可以在T4中做任何事情你可以在.NET中完成。它并不是真的有你抱怨的这些限制,它可能不像你想要的那样容易。 Codesmith有希望比T4更好,否则他们将停业。 – 2010-03-29 15:49:07