【问题标题】:ConnectionString for assemblies程序集的连接字符串
【发布时间】:2013-10-28 21:46:15
【问题描述】:

我有一个网站,其 web.config 中列出了连接字符串。发布功能会更改连接字符串,以便它可以引用开发数据库,​​直到它被发布,当它引用一个单独的发布数据库时。

不过,该网站通过一些程序集访问数据库。它们是类库,所以它们不能被发布,至少据我所知。我读到 web.config 会覆盖 app.config 连接字符串,但这似乎没有发生。

每当我发布发布站点时都会引用开发数据库,​​除非我更改程序集 app.config 文件以引用发布数据库。

我不想每次都记得这样做。我该如何处理?

【问题讨论】:

  • 使用的配置文件是宿主进程的配置文件。因此,如果您的网站正在进行 DB 调用,那么连接字符串应该来自网络配置。您的网站是在进行 DB 调用,还是在调用其他实际进行调用的服务(主机进程)?
  • 非常确定的网站。它调用内部 DAL 类型库,该库使用看起来像的 Settings.settings 扩展 DataContext。是这个问题吗? Settings.settings 不会被覆盖?

标签: c# visual-studio-2012 assemblies connection-string


【解决方案1】:

这里有两个问题:

1.每次发布时如何记住发布正确的设置:

部署此类设置的一种方法是在 Visual Studio 中使用 web.config 转换。这很容易设置,意味着您不必记住每次发布时都更新设置。

除了调试和发布环境,您还可以为“UAT”、“Staging”、“Beta”或您可能需要的任何其他配置创建转换。

您可能会发现这些文章很有用:hereherehere

例如,这里是发布环境的转换:

    <?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <connectionStrings>
      <add name="MyDB" 
        connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True" 
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
    <system.web>
    <compilation xdt:Transform="RemoveAttributes(debug)" />
      <customErrors defaultRedirect="GenericError.htm"
        mode="RemoteOnly" xdt:Transform="Replace">
        <error statusCode="500" redirect="InternalError.htm"/>
      </customErrors>
  </system.web>
</configuration>

在上面,您将看到 Release 模式的转换设置了 MyDB 连接字符串的属性 (xdt:Transform="SetAttributes"),从编译部分中删除了调试属性,并将 customErrors 部分替换为新版本。

这是一种简单但非常强大的技术。

2。如何让您的程序集获取 web.config 中的设置

如果您的库是按常规方式编写的,则它们应该通过简单地访问 [Web]ConfigurationManager.ConnectionStrings 属性来检索其连接字符串。就像@Bob Horn 所说,他们应该从主机进程的配置文件(在本例中为您的网络应用程序的 web.config)中获取设置。

但是,有时您可能会发现库正在从项目中的 .Settings 文件中获取其设置,在这种情况下事情会变得更复杂一些。您需要将 app.config 的设置部分复制到 web.config。 (您也可以使用上述转换技术来做到这一点。)

如果您有权访问其他程序集的源代码,请找到检索连接字符串的代码部分。如果它没有访问 ConfigurationManager 类,那么这可以解释为什么它没有获取 web.config 文件。

【讨论】:

  • 是的。谢谢你。我被告知他们正在从 app.config 获取连接字符串信息,但是当我真正在那里挖掘时,他们是从设置中获取的。重定向,现在一切都很好。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多