(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.