Nosso projeto tem o mesmo problema em que tivemos que manter as configurações para dev, qa, uat e prod. Aqui está o que seguimos (aplica-se apenas se você estiver familiarizado com o MSBuild):
Use o MSBuild com a extensão de tarefas da Comunidade MSBuild. Ele inclui a tarefa 'XmlMassUpdate' que pode 'atualizar em massa' entradas em qualquer arquivo XML depois que você fornece o nó correto para começar.
Implementar:
1) Você precisa ter um arquivo de configuração que terá suas entradas dev env; este é o arquivo de configuração na sua solução.
2) Você precisa ter um arquivo 'Substitutions.xml', que contém apenas as entradas DIFERENTES (principalmente appSettings e ConnectionStrings) para cada ambiente. As entradas que não são alteradas no ambiente não precisam ser colocadas neste arquivo. Eles podem residir no arquivo web.config da solução e não serão afetados pela tarefa
3) No seu arquivo de construção, basta chamar a tarefa de atualização em massa XML e fornecer o ambiente certo como parâmetro.
Veja o exemplo abaixo:
<!-- 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>
substitua '$ Environment' por 'QA' ou 'Prod' com base no ambiente. você está construindo para. Observe que você deve trabalhar em uma cópia de um arquivo de configuração e não no próprio arquivo de configuração para evitar possíveis erros não recuperáveis.
Basta executar o arquivo de construção e, em seguida, mover o arquivo de configuração atualizado para o seu ambiente de implementação e pronto!
Para uma melhor visão geral, leia isto:
http://blogs.microsoft.co.il/blogs/dorony/archive/2008/01/18/easy-configuration-deployment-with-msbuild-and-the-xmlmassupdate-task.aspx