Cambio de App.config en Runtime

Estoy escribiendo una aplicación de prueba de WinForms / C # / .NET 3.5 para el sistema que estamos desarrollando y nos encontramos ante la necesidad de cambiar entre los archivos .config en tiempo de ejecución, pero esto se está convirtiendo en una pesadilla.

Aquí está la escena: la aplicación WinForms está dirigida a probar una aplicación web, dividida en 5 subsistemas. El proceso de prueba funciona con los mensajes que se envían entre los subsistemas, y para que este proceso tenga éxito, cada subsistema tiene que tener su propio archivo .config.

Para mi aplicación de prueba escribí 5 archivos de configuración separados. Me gustaría poder cambiar entre estos 5 archivos durante el tiempo de ejecución, pero el problema es: puedo editar el archivo .config de la aplicación varias veces, pero estos cambios solo tendrán efecto una vez. He estado buscando durante mucho tiempo un formulario para solucionar este problema, pero todavía no tuve éxito.

Sé que la definición del problema puede ser un poco confusa, pero realmente agradecería que alguien me ayudara.

¡Gracias por adelantado!

--- ACTUALIZACIÓN 01-06-10 ---

Hay algo que no mencioné antes. Originalmente, nuestro sistema es una aplicación web con llamadas WCF entre cada subsistema. Por razones de pruebas de rendimiento (estamos usando ANTS 4), tuvimos que crear una copia local de los ensamblajes y hacer referencia a ellos desde el proyecto de prueba. Puede sonar un poco mal, pero no pudimos encontrar una manera satisfactoria de medir el rendimiento de una aplicación remota.

--- Fin de actualización ---

Esto es lo que estoy haciendo:

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");    
}

Respuestas a la pregunta(4)

Su respuesta a la pregunta