2010-02-24 82 views
2

我使用的亞音速3(ActiveRecord的模式)來生成DAL我的代碼。它使用T4模板(.tt)文件,只要您保存,爲您生成代碼。我如何可以自動T4代碼生成亞音速

我想爲我的NANT構建的一部分自動完成這個,但我不能得到這個工作。我知道,MS提供了一個名爲TextTransform產生從T4模板代碼的工具,但在亞音速模板的情況下,這似乎並沒有工作 - 我覺得模板使正在從Visual Studio中運行有關模板中的一些假設,這似乎不能從命令行工作。我嘗試運行ActiveRecord.tt時遇到的錯誤是:

Subsonic \ ActiveRecord.tt(0,0):錯誤:正在運行轉換:System.InvalidCastException:無法轉換類型爲'Microsoft.VisualStudio .TextTemplating.CommandLine.CommandLineHost'鍵入'System.IServiceProvider'。 在Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b。 GeneratedTextTransformation.GetCurrentProject()in c:\ Users \ matt.roberts \ AppData \ Loc al \ Temp \ subsonic \ Settings.ttinclude:line 103 at Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b。 GeneratedTextTransformation.GetConnectionString(String connectionStringName)in c:\ U sers \ matt.roberts \ AppData \ Local \ Temp \ subsonic \ Settings.ttinclude:line 51 at Microsoft.VisualStudio.TextTemplating3d54bbced2424853b667e74a81b9089b。 GeneratedTextTransformation.get_ConnectionString()in c:\ Users \ matt.roberts \ AppData \ Local \ Temp \ subsonic \ Settings.ttinclude:line 87

有沒有人設法自動化這一代?

謝謝

馬特。

回答

4

我寫了一篇博客條目,涵蓋了這地面有點:

Options for running T4 templates from .NET code

做你正在嘗試做的,需要在亞音速T4 TE一些手術mplates。具體來說,您必須(最低限度地)將所有對EnvDTE.DTE的引用替換爲不需要Visual Studio運行的東西。如果你想「讓它工作」,那麼這可能就像將一些路徑和/或配置信息硬編碼到你的T4模板一樣簡單。

重要的是要記住,T4模板是圍繞.NET代碼的一個有點薄的包裝。如果你可以從.NET完成,你很可能從T4開始,你只需要瞭解如何在T4提供的不同的約束條件下工作。不同的T4「主機」(如Visual Studio與TextTransform.exe)的行爲方式不同,只是因爲T4模板在一臺主機下運行良好並不意味着它可以在另一臺主機下正常運行。

+0

感謝你們,我下次嘗試編輯模板,看看能否用這些信息解決問題 – 2010-03-14 19:58:47

1

setting.ttinclude需要的Visual Studio項目內部運行,如果你想運行命令行,你將不得不放棄設置文件的連接字符串,而不是指向它的配置文件,您也可以必須設置項目路徑。

你SEEE它調用此:

string GetConnectionString(string connectionStringName){ 
    var _CurrentProject = GetCurrentProject(); 

    string result=""; 
    ExeConfigurationFileMap configFile = new ExeConfigurationFileMap(); 
    configFile.ExeConfigFilename = GetConfigPath(); 

這就是可能問題出在哪裏莖,因此,如果您設置這些手,那麼你oproblem然後可以解決