程序集的ConnectionString

时间:2013-10-28 21:46:16

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

这里有两个问题:

<强> 1。如何记住每次发布时发布正确的设置:

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

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

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

例如,以下是Release环境的转换:

    <?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”),从编译部分删除了debug属性,并用新版本替换了customErrors部分。

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

<强> 2。如何让程序集在web.config中选择设置

如果您的库是以通常的方式编写的,那么只需访问 [Web] ConfigurationManager.ConnectionStrings 属性即可检索其连接字符串。就像@Bob Horn说的那样,他们应该从主机进程的配置文件中获取设置(在这种情况下是你的web应用程序的web.config)。

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

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