我们有一个在各种客户的本地运行的Web应用程序。 web.config包含许多
<system.web>
和<system.webServer>
块)和在更新期间,应更换第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,其中包含特定于应用程序和客户特定的东西。
我错过了一些优雅的解决方案吗?
答案 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中,或将其移动到单独的自定义配置部分。