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

时间:2009-09-21 07:51:25

标签: c# web-config connection-string

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

到目前为止,我已设法在运行时加载appSettings(使用ConfigurationManager.OpenMappedExeConfiguration,循环访问appsettingts并将其动态添加到ConfigurationManager.AppSettings集合),但ConfigurationManager.ConnectionStrings成员是显然只读,所以我无法将web.config的连接线“注入”它。

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

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

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

connectionstrings.config:

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

<强> 更新

上面显示的方法不起作用。 configSource元素不支持绝对路径,也不支持以“.. \”开头的相对路径。

答案 2 :(得分:0)

我知道这是一个非常老的问题,但是您可以考虑将连接字符串存储在共享类库的pending中,并使用下面的SO回答中的方法来确保始终将配置文件复制到引用项目的bin文件夹为app.config。然后,您只需从引用项目的bin文件夹中读取shared.project.dll.config即可获得连接字符串。

Visual Studio/MSBuild copy referenced class library's app.config as *.dll.config to bin folder of current project