9

Ho bisogno di cambiare la mia stringa di connessione nel file web.config in base a una variabile di ambiente (per diversi ambienti, come dev/staging/production, ecc.). Ho visto altre soluzioni che utilizzano compiti di compilazione per realizzare modifiche a configurazioni diverse, ma non sono stato in grado di trovare qualcosa che mi consenta di cambiare la mia stringa di connessione in base a una variabile di ambiente. Qualcuno sa di qualsiasi modo per farlo?Modifica del file web.config basato su una variabile di ambiente in ASP.NET

risposta

7

Facciamo Questo attributo configSource per gli elementi AppSettings e connectionStrings nel web.config.

Fondamentalmente, abbiamo lo stesso file web.config per tutti i nostri ambienti: dev, qa e production.

Poi utilizziamo separato "ambiente specifici" file .. per esempio ...

Nel web.config:

<?xml version="1.0"?> 
<configuration> 
    <appSettings configSource="local.appsettings.config" /> 
    <connectionStrings configSource="local.connectionstrings.config" /> 
</configuration> 

Poi manteniamo i seguenti file:

local.appsettings.config.development 
local.appsettings.config.qa 
local.appsettings.config.production 
local.connectionstrings.config.development 
local.connectionstrings.config.qa 
local.connectionstrings.config.production 

Dal momento che pre-compiliamo tutte le nostre applicazioni asp.net prima della distribuzione, abbiamo un task msBuild personalizzato utilizzato dalla nostra soluzione CI che copia i file di configurazione corretti (in base all'ambiente di destinazione mento) al file .config corretta ...

Quindi, se stiamo schierando a dev, local.appsettings.config.development -> local.appsettings.config

Se stiamo schierando a qa, locali .appsettings.config.qa -> local.appsettings.config

Ciò ci consente di mantenere il nucleo web.config lo stesso in tutti i nostri ambienti.

+0

Ehi, grazie, c'è un modo per fare questo in base a una variabile d'ambiente però? Mi piacerebbe farlo in questo modo ma il mio cliente ha chiesto di farlo basandosi su una variabile di ambiente che hanno impostato in ciascuno dei loro diversi ambienti. Se lo fa, mi manca quella parte (dove guarda una variabile di ambiente). Grazie – Ryan

+1

Dovresti mantenere le stringhe di connessione per ogni ambiente in un unico file .config .. qualcosa come: poi, nel codice (supponendo che si dispone di una sorta di una classe "configurazione degli oggetti", allora si può leggere nella stringa di destra in base alla variabile d'ambiente. il * MAJOR * difetto con quello piano è .. ora hai tutte le informazioni di configurazione di produzione nello stesso file del tuo dev e qa. – datacop

+0

Io uso questo metodo con i file configSource nella cartella App_Data. Puoi pubblicare il tuo sito senza la cartella App_Data, mescolandola in seguito con la configurazione del proprio ambiente server. –

2

Che ne dici di avere due stringhe di connessione e un'altra variabile, come "" nel tuo web.config, quindi in base al valore di isTesting scegli quale stringa di connessione utilizzare?

0

è anche possibile utilizzare le sezioni di configurazione e in base al nome del server passare da una sezione all'altra. in questo modo puoi avere le chiavi con lo stesso nome.

link text