拆分特定于应用程序和客户的Web.config部件

时间:2016-08-20 09:23:45

标签: c# asp.net iis web-config

我们有一个在各种客户的本地运行的Web应用程序。 web.config包含许多

  1. “我们的应用程序的一部分”(例如大多数<system.web><system.webServer>块)和
  2. 需要自定义的内容(连接字符串,应用设置和各种自定义标记)。
  3. 在更新期间,应更换第1部分,并保留第2部分。理想情况下,我有web.app.configweb.custom.config,所以我只能替换第一个。当然,IIS需要在运行时神奇地“合并”它们,而不是这样做。

    我找到了以下方法:

    • Put the custom stuff in external files,即<appSettings configSource="appSettings.config"/>

      我无法使用它,因为它只能用于完整部分。但是,例如,aspnet:MaxHttpCollectionKeys设置是should be controlled by the application的值,而其他应用设置值应该是可自定义的。

    • Parameterization or Web.Config Transformation

      我无法使用它,因为我们的客户安装了各种版本的应用程序。因此,我需要替换 web.config的特定于应用程序的部分,而不是转换单个标记。另外,我想避免将msdeploy添加到我们的部署过程中(xcopy加上一些脚本来创建IIS应用程序并配置它们目前运行良好)。哦,我还有一个很大的web.config,其中包含特定于应用程序和客户特定的东西。

    我错过了一些优雅的解决方案吗?

1 个答案:

答案 0 :(得分:1)

configSource用于完整版块,但appSettings有一个名为file的特殊属性,可用于引用文件为&#39 ;合并&#39;进入appSettings列表。有关详细信息,请参阅https://msdn.microsoft.com/en-AU/library/ms228154(v=vs.85).aspx。我已广泛使用appSettings.config文件中的环境特定值 - 本地dev值(包含在repo中)或者使用特定于环境的设置转储到服务器上的文件。通过qa,uat,prod环境等推广构建工件时很有帮助。对于您来说,该文件可能包含您的客户特定值,并且在部署更新时不会更改。

另一种方法是将客户特定配置重构为Custom Configuration Section。除了为您提供配置值的类型访问权限外,您还可以从web.config中的某个部分加载它,从web.config中通过configSource引用其他文件的部分加载它,或者您可以加载它直接来自一个单独的文件。

然后,您可以将应用程序配置保留在appSettings中,或将其移动到单独的自定义配置部分。