【问题标题】:How do you manage .NET app.config files for large applications?您如何管理大型应用程序的 .NET app.config 文件?
【发布时间】:2010-09-10 11:52:37
【问题描述】:

假设一个大型复合应用程序构建在几个基础组件上,这些基础组件封装在它们自己的程序集中:(数据库读取、协议处理程序等)。对于某些部署,这可能包括 20 多个程序集。这些程序集中的每一个都具有设置或配置信息。我们的团队倾向于喜欢 VS 设置编辑器(以及它生成的易于使用的代码!),应用程序与用户的区别满足了我们的大部分需求。

但是....

将许多配置部分复制并粘贴到我们应用程序的 .xml 中非常繁琐。此外,对于跨应用程序往往具有相似配置的共享组件,这意味着我们需要在多个 .config 文件中维护重复的设置。

Microsoft 的 EntLib 使用外部工具来生成怪物 .config 文件解决了这个问题,但这感觉也很笨拙。

您使用哪些技术来管理包含来自多个共享程序集的部分的大型 .NET .config 文件?某种包含机制?自定义配置读取器?

跟进:

Will 的answer 正是我所了解的,对于平面键/值对部分来说看起来很优雅。有没有办法将这种方法与 custom configuration sections 结合起来?

也感谢有关为不同构建目标管理不同 .config 的建议。这也很有用。

戴夫

【问题讨论】:

    标签: c# .net configuration


    【解决方案1】:

    您使用一个指向其他配置文件的主配置文件。 Here's an example of how to do this.


    如果链接失效,您要做的是为特定配置部分指定configSource。这允许您在单独的文件中定义该特定部分。

    <pages configSource="pages.config"/>
    

    这意味着在包含整个&lt;pages /&gt; 节点树的同一目录中有一个名为“pages.config”的文件。

    【讨论】:

      【解决方案2】:

      管理大量配置的一种好方法是创建自定义配置部分。 Phil Haack 在这篇文章中很好地讨论了这一点Custom configuration sections in 3 easy steps

      【讨论】:

        【解决方案3】:

        为每个部署/测试环境设置构建配置,并根据每个构建配置使用单独的配置文件。

        ScottGu 对此有 a nice post,它的效果很好。我们唯一的怪癖是,我们需要确保在每次构建之前从 TFS 签出配置文件 (web.config) 以进行编辑,以便可以复制它。

        【讨论】:

          【解决方案4】:

          我的首选方法是使用 MSBuild,如果您右键单击一个项目并单击“卸载”,则会弹出一个新的菜单选项,上面写着“编辑”。选择它,它会打开项目文件以便您对其进行编辑,向下滚动直到找到一个名为“AfterBuild”的已注释掉的部分。

          然后您可以添加如下内容:

          <Target Name="AfterBuild">
              <Delete Files="$(TargetDir)$(TargetFileName).config" />
              <Copy SourceFiles="$(ProjectDir)$(Configuration).config" DestinationFiles="$(TargetDir)$(TargetFileName).config" />
          </Target>
          

          这会将应用程序配置替换为名为 [Release|Debug]app.exe.config 的配置。因此,您可以根据项目的构建方式维护单独的配置。

          但是一个快速而肮脏的选择(如果您不想使用 msbuild)是只维护单独的配置文件,然后定义要包含的配置文件,如下所示:

          <appSettings configSource="Config\appSettingsDebug.config"/>
          <roleManager configSource="Config\roleManagerDebug.config"/>
          

          如果您正在开发一个 asp.net 应用程序,微软提供了一个名为“Web 部署项目”的强大实用程序,可让您轻松管理所有这些,click here

          【讨论】:

          • 对于那些使用 ClickOnce 的人:根据我的经验,这个解决方案(虽然很好)不能很好地与 ClickOnce 一起使用。
          【解决方案5】:

          我们创建了一个类似于 ConfigurationManager 的 AssemblySettingsConfig 类,但会为每个单独的程序集加载一个 .config。所以应用程序有一个 .config,它引用的任何 DLL 都有自己的 .config 文件。到目前为止效果很好。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2011-05-19
            • 2012-01-31
            • 2010-11-17
            • 1970-01-01
            • 2011-05-24
            • 1970-01-01
            • 2021-07-25
            • 2012-02-25
            相关资源
            最近更新 更多