Non è detto che per leggere un file di configurazione (per esempio un web.config) di un'altra applicazione, bisogna per forza utilizzare le classi XML. Basta essere folli e scrivere una cosa come questa qui sotto, sparata oggi - e di cui ne sono contento :-)
In una web application Test, che ha questo web.config:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings>
    <add key="fooMessage" value="Hello World!" />
  </appSettings>
</configuration>
aggiungiamo questa classe:
using System;
using System.Configuration;
using System.Collections.Specialized;
namespace Ugidotnet.Configuration
{
  public sealed class CrossConfigSetter
  {
    private CrossConfigSetter(){}
    public const string DataName = "AppSettings";
    public static void SetAppSettingsData()
    {
      NameValueCollection serializableAppSettings = new NameValueCollection(ConfigurationSettings.AppSettings);
      AppDomain.CurrentDomain.SetData(DataName, serializableAppSettings);
    }
  }
}
mentre nella console application da cui vogliamo leggere il web.config della web application Test, scriviamo:
using System;
using System.Configuration;
using System.Collections.Specialized;
namespace Ugidotnet.Configuration
{
  public sealed class CrossConfigGetter
  {
    private CrossConfigGetter(){}
    public static NameValueCollection GetAppSettingsData(string configFileName, CrossAppDomainDelegate setter, string dataName)
    {
      NameValueCollection ret;
      AppDomainSetup ads = new AppDomainSetup();
      ads.ConfigurationFile = configFileName;
      AppDomain ad = AppDomain.CreateDomain(Guid.NewGuid().ToString(), null, ads);
      ad.DoCallBack(setter);
      ret = ad.GetData(dataName) as NameValueCollection;
      AppDomain.Unload(ad);
      return ret;
    }
  }
}
per poi utilizzarla così:
using System;
using System.Collections.Specialized;
using Ugidotnet.Configuration;
class TestCrossConfig
{
  static void Main()
  {
    string webConfigFileName = "C:\\Inetpub\\wwwroot\\Test\\Web.config";
    NameValueCollection appSettings = CrossConfigGetter.GetAppSettingsData(
        webConfigFileName,
        new CrossAppDomainDelegate(CrossConfigSetter.SetAppSettingsData),
        CrossConfigSetter.DataName);
    Console.WriteLine(appSettings["fooMessage"]);
  }
}
Commenti graditi.