Alterando o App.config no tempo de execução

Eu estou escrevendo um teste WinForms / C # / .NET 3.5 para o sistema que estamos desenvolvendo e nós caímos na necessidade de alternar entre arquivos .config em tempo de execução, mas isso está se tornando um pesadelo.

Aqui está a cena: o aplicativo WinForms tem como objetivo testar um WebApp, dividido em 5 subsistemas. O processo de teste funciona com mensagens sendo enviadas entre os subsistemas e, para que esse processo seja bem-sucedido, cada subsistema tem que ter seu próprio arquivo .config.

Para o meu aplicativo de teste, escrevi 5 arquivos de configuração separados. Eu gostaria de poder alternar entre esses 5 arquivos durante a execução, mas o problema é: Eu posso editar programaticamente o arquivo .config do aplicativo várias vezes, mas essas alterações só terão efeito uma vez. Eu tenho procurado há muito tempo por um formulário para resolver esse problema, mas eu ainda não tive sucesso.

Eu sei que a definição do problema pode ser um pouco confusa, mas eu realmente aprecio se alguém me ajudar.

Desde já, obrigado!

--- ATUALIZAÇÃO 01-06-10 ---

Há algo que eu não mencionei antes. Originalmente, nosso sistema é um aplicativo da Web com chamadas do WCF entre cada subsistema. Por motivos de teste de desempenho (estamos usando o ANTS 4), tivemos que criar uma cópia local dos assemblies e referenciá-los a partir do projeto de teste. Pode parecer um pouco errado, mas não conseguimos encontrar uma maneira satisfatória de medir o desempenho de um aplicativo remoto.

--- Atualização final ---

Veja o que estou fazendo:

public void UpdateAppSettings(string key, string value)
{
    XmlDocument xmlDoc = XmlDocument.Load(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

    foreach (XmlElement item in xmlDoc.DocumentElement)
    {
        foreach (XmlNode node in item.ChildNodes)
        {
            if (node.Name == key)
            {
                node.Attributes[0].Value = value;
                break;
            }
        }
    }

    xmlDoc.Save(AppDomain.CurrentDomain.SetupInformation.ConfigurationFile);

    System.Configuration.ConfigurationManager.RefreshSection("section/subSection");    
}

questionAnswers(4)

yourAnswerToTheQuestion