我们的项目有同样的问题,我们必须维护 dev、qa、uat 和 prod 的配置。以下是我们遵循的(仅适用于您熟悉 MSBuild):
将 MSBuild 与 MSBuild 社区任务扩展一起使用。它包括“XmlMassUpdate”任务,一旦你给它正确的节点开始,它就可以“大规模更新”任何 XML 文件中的条目。
实施:
1) 您需要有一个配置文件,其中包含您的开发环境条目;这是您的解决方案中的配置文件。
2)您需要有一个“Substitutions.xml”文件,其中仅包含每个环境不同的条目(主要是 appSettings 和 ConnectionStrings)。不会在环境中更改的条目不需要放在此文件中。它们可以存在于解决方案的 web.config 文件中,不会被任务触及
3) 在您的构建文件中,只需调用 XML 批量更新任务并提供正确的环境作为参数。
请参见下面的示例:
<!-- Actual Config File -->
<appSettings>
<add key="ApplicationName" value="NameInDev"/>
<add key="ThisDoesNotChange" value="Do not put in substitution file" />
</appSettings>
<!-- Substitutions.xml -->
<configuration xmlns:xmu="urn:msbuildcommunitytasks-xmlmassupdate">
<substitutions>
<QA>
<appSettings>
<add xmu:key="key" key="ApplicationName" value="NameInQA"/>
</appSettings>
</QA>
<Prod>
<appSettings>
<add xmu:key="key" key="ApplicationName" value="NameInProd"/>
</appSettings>
</Prod>
</substitutions>
</configuration>
<!-- Build.xml file-->
<Target Name="UpdateConfigSections">
<XmlMassUpdate ContentFile="Path\of\copy\of\latest web.config" SubstitutionsFile="path\of\substitutionFile" ContentRoot="/configuration" SubstitutionsRoot="/configuration/substitutions/$(Environment)" />
</Target>
根据什么环境将“$Environment”替换为“QA”或“Prod”。你正在建设。请注意,您应该使用配置文件的副本而不是实际的配置文件本身,以避免任何可能的不可恢复的错误。
只需运行构建文件,然后将更新的配置文件移动到您的部署环境,就完成了!
要获得更好的概述,请阅读以下内容:
http://blogs.microsoft.co.il/blogs/dorony/archive/2008/01/18/easy-configuration-deployment-with-msbuild-and-the-xmlmassupdate-task.aspx