2010-01-31 57 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) 
相关问题