【问题标题】:Split application-specific and customer-specific web.config parts拆分特定于应用程序和特定于客户的 web.config 部分
【发布时间】:2016-08-20 09:23:45
【问题描述】:

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

  1. “我们应用程序的一部分”的东西(例如大部分<system.web><system.webServer> 块)和
  2. 需要自定义的东西(连接字符串、应用设置和各种自定义标签)。

在更新期间,第 1 部分应被替换,第 2 部分应保持原样。理想情况下,我有一个web.app.config 和一个web.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,其中包含特定于应用程序和特定于客户的内容。

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

【问题讨论】:

  • 我想你什么都没漏掉。 web.config 的设计并没有考虑到这样的要求。
  • @Downvoter:我们总是感谢您提供反馈以改进问题。

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


【解决方案1】:

configSource 确实用于完整的部分,但appSettings 有一个特殊的属性,称为file,可用于引用要“合并”到 appSettings 列表中的文件。有关详细信息,请参阅https://msdn.microsoft.com/en-AU/library/ms228154(v=vs.85).aspx。我已经广泛用于合并具有环境特定值的 appSettings.config 文件 - 本地开发值(包含在 repo 中)或转储到具有环境特定设置的服务器上的文件。在通过 qa、uat、prod 环境等推广构建工件时很有帮助。对您而言,该文件可能包含您的客户特定值,并且在您部署更新时不会更改。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-17
    • 1970-01-01
    相关资源
    最近更新 更多