【问题标题】:Multiple applications sharing same configuration files多个应用程序共享相同的配置文件
【发布时间】:2010-12-14 03:34:48
【问题描述】:

在我的生产环境中,我在同一台机器上安装了多个 Web 应用程序。这些应用程序访问各种 Web 服务和两个 SQL Server 数据库,这意味着我的 web.config 文件非常大并且充满了细节。除此之外,我还有使用相同 Web 服务并访问不同数据库的 Windows 服务,而且我还有包含大量详细信息的大型 app.config 文件。整个解决方案是使用 .NET 3.5 (C#) 开发的。

当我的四个开发团队中的一个想要部署解决方案的某些部分的新版本并且所有配置文件都需要更改时,我的问题就开始了。因为我的 QA 环境与生产环境有不同的机器名称,所以我无法复制配置文件的简单副本,我需要手动更改每个配置文件。而且,无论我的同事做了多少检查(甚至使用检查列表),一些配置都保持不变,并且部分解决方案停止了。

有没有办法为所有应用程序创建一个唯一的配置文件?或者,至少,将数据库连接字符串和 Web 服务 URL 集中在一个文件中以供所有应用程序使用?

P.S.:我无法更改部署团队,因为他们属于我的客户 :(

【问题讨论】:

    标签: .net web-services configuration windows-services


    【解决方案1】:

    这是另一个想法(实际上是我们如何解决配置问题)。也许这更符合您的需求。

    我们的配置文件也相当大,但唯一真正改变的是配置字符串。

    每个配置都有一个文件,其中包含特定的配置字符串(用于开发的数据库、用于构建的数据库、用于 QA 的数据库)。文件如下所示:

    <templates>
      <template key="db" value="development server connection string"/>
      <template .../>
    </templates>
    

    这些文件以它们使用的环境命名 (devel.xml, build.xml, qa.xml)

    在配置文件中,连接字符串被占位符 (${db}) 替换。

    我们为每个环境(devel、build、qa)提供了构建配置。在构建这样的配置时,构建后事件会将配置文件中的占位符替换为模板文件中存储的值。这将为每个环境生成正确的配置文件。

    这个想法来自Managing Multiple Configuration File Environments with Pre-Build Events,但通过模板替换进行了扩展。

    【讨论】:

      【解决方案2】:

      如果我理解正确,您想排除一些“稳定”设置

      1. 配置系统是分层的,您可以将默认设置存储在
        C:\Windows\Micorsoft.NET\&lt;version&gt;\Machine.configWeb.config
        这是一个相当沉重的工具。出错,大多数 .NET 应用程序将无法启动

      2. 使用ConfiguratonManager class 从共享路径获取设置。不过,这可能需要更改(所有)读取设置的代码。

      【讨论】:

        【解决方案3】:

        您可以使用connectionStrings 部分中的configSource 属性来包含外部连接字符串文件:

        应用程序 web.config

        <configuration>
          <connectionStrings configSource="connectionStrings.config" />
        </configuration>
        

        connectionStrings.config

        <connectionStrings>
          <add name="connection1" connectionString="..." />
        </connectionStrings>
        

        注意:正如 marc_s 在 cmets 中所建议的,configSource 属性可用于任何配置部分。

        【讨论】:

        • 这实际上适用于 any 配置部分 - 不仅仅是 connectionStrings。
        【解决方案4】:

        您可以在 web.config 中包含外部 xml 文件。

        See this question

        <!-- SomeProgram.exe.config -->
        <configuration>
          <connectionStrings configSource="externalConfig/connectionStrings.config"/>
        </configuration>
        
        <!-- externalConfig/connectionStrings.config -->
        <connectionStrings>
          <add name="conn" connectionString="blahblah" />
        </connectionStrings>
        

        【讨论】:

        • Alexander,感谢您的回答,但它并不能满足我的所有需求。 ConfigSource 必须引用同一目录或配置文件子目录中的文件。所以,用你的方法,我需要创建新的配置而不是减少它们的数量。
        【解决方案5】:

        您可以集中部分配置并动态加载该文件。看到这个codeproject article

        【讨论】:

          猜你喜欢
          • 2019-11-06
          • 2013-03-19
          • 2011-05-30
          • 2017-09-09
          • 2010-09-17
          • 1970-01-01
          • 2011-01-31
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多