我们的项目存在相同的问题,我们必须维护dev,qa,uat和prod的配置。这是我们遵循的内容(仅在您熟悉MSBuild的情况下适用):
将MSBuild与MSBuild社区任务扩展一起使用。它包括“ XmlMassUpdate”任务,一旦您为其指定了正确的节点,它便可以“批量更新”任何XML文件中的条目。
实施:
1)您需要一个配置文件,其中将包含您的dev env条目;这是您解决方案中的配置文件。
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