Domanda

Disponiamo di una suite di applicazioni .Net 3.5 interconnesse.Alcuni sono siti Web, altri sono servizi Web e altri ancora sono applicazioni Windows.Ogni app attualmente ha il proprio file di configurazione (app.config o web.config) e attualmente ci sono alcune chiavi duplicate nei file di configurazione (che al momento vengono mantenute sincronizzate manualmente) poiché più app richiedono lo stesso valore di configurazione.Inoltre, questa suite di applicazioni viene distribuita in vari ambienti (sviluppo, test, live, ecc.)

Qual è l'approccio migliore per gestire la configurazione di queste più app da un'unica origine di configurazione, in modo che i valori di configurazione possano essere condivisi tra più app, se necessario?Vorremmo anche avere configurazioni separate per ogni ambiente (così durante la distribuzione non è necessario modificare manualmente alcuni valori di configurazione specifici dell'ambiente come le stringhe di connessione), ma allo stesso tempo non vogliamo mantenere più configurazioni di grandi dimensioni file (uno per ogni ambiente) poiché mantenerlo sincronizzato quando si aggiungono nuove chiavi di configurazione si rivelerà problematico.

È stato utile?

Soluzione

Utilizziamo modelli di file come MyApp.config.template e MyWeb.config.template con proprietà NAnt per i bit diversi tra gli ambienti.Quindi il file modello potrebbe assomigliare a questo:

<MyAppConfig>
    <DbConnString>${DbConnString}</DbConnString>
    <WebServiceUri uri="${WebServiceUri}" />
</MyAppConfig>

Durante una build generiamo tutte le configurazioni per i diversi ambienti semplicemente eseguendo il loop di ciascun ambiente in uno script NAnt, modificando il valore delle proprietà NAnt ${DbConnString} e ${WebServiceUri} per ciascun ambiente (in effetti queste sono tutte impostate in un singolo file con sezioni per ogni ambiente) ed eseguendo una copia NAnt con l'opzione per espandere le proprietà attivata.

Ci è voluto un po' di tempo per la configurazione, ma ci ha ripagato almeno dieci volte in termini di tempo risparmiato giocando con diverse versioni dei file di configurazione.

Altri suggerimenti

Visual Studio ha una funzionalità relativamente oscura che ti consente di aggiungere elementi esistenti come collegamenti, il che dovrebbe realizzare ciò che stai cercando.Guardare Il post di Derik Whittaker su questo argomento per maggiori dettagli.

Visual Studio dovrebbe davvero rendere questa opzione più visibile.Nessuno pensa davvero di fare clic su quella piccola freccia accanto al pulsante "Aggiungi".

Puoi dividere App.config in più file di configurazione.Basta specificare il nome del file che contiene la sezione di configurazione.

Modifica app.config:

<SomeConfigSection>
  <SettingA/>
  <SettingB/>
</SomeConfigSection>
<OtherSection>
  <SettingX/>
</OtherSection>

In app.config e SomeSetting.xml:

<SomeConfigSection file="SomeSetting.xml" />
<OtherSection file="Other.xml" />

Dove SomeSetting.xml contiene:

Ora puoi comporre il tuo app.config da diversi file di sezione con una sorta di script di compilazione o distribuzione.Per esempio.:

if debug copy SomeSettingDebug.xml deploydir/SomeSetting.xml
if MySql copy OtherSectionMySql.xml deploydir/OtherSetting.xml

Dai un'occhiata al framework prisma dal gruppo di modelli e pratiche di Microsoft?

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top