在2个.NET应用程序之间共享连接字符串

问题描述:

假设我有一个运行着相应web.config文件的ASP.NET网站,该文件包含一堆用于数据库访问的连接字符串。我也有一个小帮手控制台程序(部署到Web应用程序相同的文件夹),执行维护任务和其他的东西。这个帮助程序与web应用程序共享一堆dll,因此我必须为它保留一个单独的bla.exe.config文件,以便共享的dll可以找到连接字符串等。 我希望能够使控制台应用程序使用web.config而不是拥有自己的配置文件。在2个.NET应用程序之间共享连接字符串

到目前为止,我管理(使用ConfigurationManager.OpenMappedExeConfiguration,通过appsettingts循环并动态将它们添加到ConfigurationManager.AppSettings集合)加载在运行时的appSettings,但ConfigurationManager.ConnectionStrings成员显然是只读的,所以我不能“注入”的web.config的连接字符串。

任何想法?

+0

助手控制台程序是同一个Visual Studio解决方案的一部分吗?如果是这样,你可以考虑使用NANT脚本构建你的配置文件。 – RichardOD 2009-09-21 08:15:31

+0

这个想法是有一个单一的配置文件,以减少维护成本,并防止由配置文件的差异造成的未来SNAFU。 – 2009-09-21 08:53:06

您可以尝试使用connectionStrings部分的configSource attribute来引用外部文件。我还没有尝试过,但这样的事情:

<connectionStrings configSource="..\connnectionstrings.config"> 

connectionstrings.config:

<connectionStrings> 
    <add name="..." connectionString="Server=...;Database=..;" /> 
</connectionStrings> 

更新:

上面所示的方法行不通。 configSource元素不支持绝对路径或以“.. \”开头的相对路径。

+0

我试过configSource的方法,它似乎工作。问题是,我必须将'connectionstrings.config'文件直接放在'bin'目录下,哪种类型很吸引,但仍然可以接受。我会等待看看是否有更好的解决方案出现,否则我会将其标记为已接受。 – 2009-09-21 10:12:47

就我个人而言,我只是编程一种方式,以便两个应用程序可以找到相同的文件。我会使用类似于Environment.SpecialFolder的东西使用CommonApplicationData枚举。您可能会考虑machine.config文件,尽管通常不建议这样做。