title: Changing App.config at Runtime
body: <p>I'm writing a test WinForms / C# / .NET 3.5 application for the system we're developing and we fell in the need to switch between .config files at runtime, but this is turning out to be a nightmare.</p>
  
  <p>Here's the scene: the WinForms application is aimed at testing a WebApp, divided into 5 subsystems. The test process works with messages being sent between the subsystems, and for this process to be successful each subsystem got to have its own .config file.</p>
  
  <p>For my Test Application I wrote 5 separate configuration files. I wish I was able to switch between these 5 files during runtime, but the problem is: I can programatically edit the application .config file numerous times, but these changes will only take effect once. I've been searching a long time for a form to address this problem but I still wasn't successful.</p>
  
  <p>I know the problem definition may be a bit confusing but I would really appreciate it if someone helped me.</p>
  
  <p>Thanks in advance!</p>
  
  <p>--- UPDATE 01-06-10 ---</p>
  
  <p>There's something I didn't mention before. Originally, our system is a Web Application with WCF calls between each subsystem. For performance testing reasons (we're using ANTS 4), we had to create a local copy of the assemblies and reference them from the test project. It may sound a bit wrong, but we couldn't find a satisfying way to measure performance of a remote application.</p>
  
  <p>--- End Update ---</p>
  
  <p>Here's what I'm doing:</p>
  
  <pre><code>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");    
  }
  </code></pre>