2010-01-31 56 views
5

有沒有人有一個很好的示例或助手類,它允許我從位於Web應用程序引用的另一個程序集的T4模板中讀取Web應用程序中的連接字符串。我從它引用的數據庫中生成一些代碼,並且我會在如何獲取連接字符串的這個用法上得到一些幫助。 我讀過George Js的例子here但是它只在模板駐留在web應用程序中時才起作用,請大家幫忙!!!使用t4從另一個程序集讀取web.config

+0

所以讓我看看,如果我瞭解情況..你有一個網絡應用程序。你有一個你可以修改但是被編譯到單獨的引用程序集的模板。當您運行轉換時,您希望能夠讀取引用Web應用程序的web.config?需要第二個細節:你如何運行模板?交互式地從VS或以編程方式@運行時?如果你能澄清這些問題,我相信一個簡單的解決方案是有的。 – 2010-02-06 06:51:09

+0

你現在就在。該模板位於實際Web應用程序之外的引用程序集中,首先回答您的問題,以便能夠在設計時以交互方式在vs ..中運行它。我們正在研究一個集成的構建,我們有svn運行,並且模板連接字符串的不斷修改正在驅動我們dil(db在app_data文件夾中)。即時通訊尋找一種方法來引用數據庫在app_data文件夾中使用相對路徑(或絕對)來獲取文件本身。 – 2010-02-06 09:34:23

回答

3
var path = Host.ResolvePath(@"../Web.config"); 
var map = new ExeConfigurationFileMap { ExeConfigFilename = path };   
var config = ConfigurationManager.OpenMappedExeConfiguration(
              map,ConfigurationUserLevel.None); 
var appSettings = config.AppSettings; 
var connectionStrings = config.ConnectionStrings.ConnectionStrings; 
1

你可以嘗試做這樣的事情:

var config = ConfigurationManager.OpenExeConfiguration("../somePathTo/web.config") 
// use the config to get values like: config.AppSettings 
+0

hey rob,t4模板在自定義工具下運行,因此相對路徑不工作,因爲它在工具而非項目的上下文中工作。 – 2010-02-01 17:49:54

+0

如果你打電話給大會,你可以做某事。像這樣: 新Uri(Assembly.GetCallingAssembly()。CodeBase).AbsolutePath 這隻會工作,如果您自定義工具使用API​​調用來優化T4。 可能是您的自定義工具可以提供某種類型的路徑參數,或者可以將路徑信息寫入某種共享數據存儲。 (excecuting目錄的XML文件)? 這將是很好的獲得更多的信息。 – Robert 2010-02-01 22:22:10

+0

這是上面調用<#= System.Reflection.Assembly.GetCallingAssembly()的結果。CodeBase#> file:/// C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualStudio。 TextTemplating.10.0/v4.0_10.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.TextTemplating.10.0.dll – 2010-02-02 17:32:27

0

位在T4左右IVE搜索找到我的答案後,人們可以使用

path = Host.ResolvePath(relativeFileName) 
相關問題