【问题标题】:Sharing connectionstrings between 2 .NET applications在 2 个 .NET 应用程序之间共享连接字符串
【发布时间】:2010-11-30 00:18:04
【问题描述】:

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

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

有什么想法吗?

【问题讨论】:

  • 辅助控制台程序是同一个 Visual Studio 解决方案的一部分吗?如果是这样,您可以考虑使用 NANT 脚本构建配置文件。
  • 这个想法是有一个单一的配置文件,以降低维护成本并防止未来由于配置文件的差异而导致的SNAFU。

标签: c# web-config connection-string


【解决方案1】:

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

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

connectionstrings.config:

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

更新:

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

【讨论】:

  • 我尝试了 configSource 方法,它似乎有效。问题是,我必须将 'connectionstrings.config' 文件直接放在 'bin' 目录下,这很糟糕,但仍然可以接受。我会等着看是否有更好的解决方案出现,否则我会将其标记为已接受。
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    我知道这是一个非常古老的问题,但您可以考虑将连接字符串存储在共享类库的 app.config 中,并使用以下 SO 答案中的方法来确保始终将配置文件复制到引用项目的 bin 文件夹中作为shared.project.dll.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

    【讨论】:

      猜你喜欢
      • 2018-03-17
      • 1970-01-01
      • 1970-01-01
      • 2019-01-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-10
      相关资源
      最近更新 更多