2010-03-29 73 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