Freeteo


Pensieri e C#dice di Matteo Raumer

Modificare il config delle applicazioni a runtime

Che si stia sviluppando un'applicazione Asp.net o un Win32 (WindowsForm, WPF etc...), per leggere i dati di configurazione la classe che ci viene data dal Framework è ConfigurationManager, del Namespace "System.Configuration".
(purtroppo non viene referenziato di default, ma bisogna ricordarsi di referenziarlo nel progetto come componente .net).
 
Quello che ci permette di fare è più che sufficiente per l'utilizzo standard, ossia avere a portata di mano i parametri di config, quello che però manca è la possibilità di modificare i valori a runtime, caso che spesso torna utile avere (anche in casi di questo tipo).
Per queste esigenze, qualcosa di più completo per gestire i file di configurazione è la sua "abbinata" classe "Configuration" che viene restituita proprio dal metodo "OpenExeConfiguration(...)", usando sintassi di questo tipo:

   Configuration
config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None);

   CheckConfig(config,
new ConnectionStringSettings("dbConnection", @"data source=.\SQLEXPRESS;...", "System.Data.SqlClient"));
   CheckConfig(config,
"ip", "192.168.0.1");

   //--- salvo e riaggiorno ConfigurationManager
   config.Save();
   ConfigurationManager.RefreshSection("connectionStrings");
   ConfigurationManager.RefreshSection("appSettings");
}


private
void CheckConfig(Configuration config, string nome, string valore)
{
  
if (config.AppSettings.Settings[nome] == null)
       config.AppSettings.Settings.Add(nome, valore);
  
else
      
config.AppSettings.Settings[nome].Value = valore;
}

private void CheckConfig(Configuration config, ConnectionStringSettings cn)
{
  
if (config.ConnectionStrings.ConnectionStrings[cn.Name] == null)
      config.ConnectionStrings.ConnectionStrings.Add(cn);
   else
   {
      config.ConnectionStrings.ConnectionStrings[cn.Name].ConnectionString = cn.ConnectionString;
      config.ConnectionStrings.ConnectionStrings[cn.Name].ProviderName = cn.ProviderName;
   }
}
 
* Il metodo OpenExeConfiguration usato nell'esempio prende le impostazioni relative all'applicazione in esecuzione ma è possibile anche specificare un path dove andare a prendere la configurazione di qualche altro applicativo.

Unica attenzione, la classe ConfigurationManager tiene in cache quello che ha letto all'avvio dell'applicazione, se volete avere i valori aggiornati dopo che li avete modificati senza riavviare, come nell'esempio ricordarsi di invocare il metodo "RefreshSection("...nomeSezione...")", attenzione che è case sensitive.
Categoria: Tips
venerdì, 02 lug 2010 Ore. 12.07

Messaggi collegati






  • Views Home Page: 214.212
  • Views Posts: 370.017
  • Views Gallerie: 430.718
  • n° Posts: 163
  • n° Commenti: 148
Anno 2014

Anno 2013

Anno 2012

Anno 2011

Anno 2010

Anno 2009

Anno 2008

Anno 2007

Anno 2006

Anno 2005
Copyright © 2002-2007 - Blogs 2.0
dotNetHell.it | Home Page Blogs
ASP.NET 2.0 Windows 2003