Logo UGIdotNET

Impostazioni multiple dei valori memorizzati in appSettings

Credo che tutti quelli che, come me, sviluppano applicazioni per il web siano più o meno rassegnati ad avere due (almeno!) diversi file Web.config: uno sulla propria macchina con al suo interno le impostazioni che permettono all'applicazione di funzionare in locale ed uno, da copiare sul server di produzione (o di test, o di sviluppo, come preferite :-D) che le impostazioni adatte alla situazione.

Bene, se siete in questa situazione, ed utilizzate la sezione appSettings per memorizzare i settaggi della vostra applicazione, allora potete beneficiare dell'attributo "file". Questo, se specificato, informa il framework che c'è un altro file da leggere e che i valori al suo interno devono sostituire quelli specificati nel Web.config.

Per chiarire il concetto credo che un bell'esempio sia la cosa più facile. Prendiamo questo semplice Web.config:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings>
        <add key="SQL.ConnectionString" value="Data Source=xxx.xxx.xxx.xx; ..." />
    </appSettings>
</configuration>

Nella chiave "SQL.ConnectionString" viene memorizzata la stringa di connessione al database che verrà utilizzata all'interno della nostra applicazione.

Normalmente però database di sviluppo, di test e di produzioni sono ben distinti, e se desideriamo effettuare il deploy della nostra applicazione sul server di test molto probabilmente dovremo cambiare a manina anche il valore dell'attributo value, in modo che rifletta i corretti valori per il database di test.

Se le impostazioni da variare sono tante, la cosa può diventare noiosa. Se poi ci si dimentica di fare le necessarie modifiche, l'applicazione rilasciata sul server di test (o peggio su quello di produzione) può non funzionare del tutto o funzionare in modo inaspettato (e quindi mail che non arrivano, ordini non memorizzati e cosi via)

Un modo molto comodo per evitare questi problemi è quello di specificare nell'elemento appSettings anche l'attributo file:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
    <appSettings file="localWeb.config">
        <add key="SQL.ConnectionString" value="Data Source=xxx.xxx.xxx.xx; ..." />
    </appSettings>
</configuration>

Questo informa il compilatore che c'è un file chiamato localWeb.config che contiene dei valori che devono essere utilizzati al posto di quelli specificati nell Web.config stesso.

Se quindi nel file localWeb.config si trova questo codice:

<?xml version="1.0" encoding="utf-8"?>
<appSettings>
    <add key="SQL.ConnectionString" value="Data Source=localhost; ..." />
</appSettings>

il valore letto tramite

ConfigurationSettings.AppSettings["SQL.ConnectionString"]

conterrà il dato specificato nel localWeb.config anzichè quello presente in Web.config.

Se successivamente si sposta il Web.config sul server di test (o di produzione), la presenza dell'attributo file non comporta nessun fastidio: semplicemente, dato che il localWeb.config è assente, viene ignorata, e quindi i dati letti saranno quelli presenti nel Web.config

Un'ultima nota, che farà felici anche coloro che non sviluppano unicamente applicazione ASP.NET è che questa tecnica funziona per tutti i tipi di applicazioni.

Autore: Davide Mauri
Data: 21 settembre 2004
Ultimo aggiornamento: 21 settembre 2004
Categorie: 

© 2001 User Group Italiano UGIdotNET. Tutti i diritti riservati. Note legali. - Partita IVA 01927050185