Con
Visual Studio 2010 è disponibile un utile funzionalità definita
web.config Transformation.
In pratica è possibile fare in modo che
Visual Studio 2010, durante il deploy di una applicazione, applichi una trasformazione al web.config.
Quindi è possibile avere un web.config di base più tanti altri web.config di trasformazione quanti sono gli ambienti (di default due
Debug e
Release).
web.config
web.Debug.config
web.Release.config
Per generare i file di trasformazione è sufficiente cliccare sul file
web.config con il tasto destro del mouse e selezionare
Add Config Transforms.
Attenzione: la trasformazione del web.config viene applicata solo quando si fa
deploy quindi
non funziona con il web server interno di
Visual Studio 2010Uno dei possibili utilizzi del
web.config Transformation è cambiare la stringa di connessione al
DB in base all'ambiente di deploy (Debug, Release o altri custom come ad esempio Staging).
Vediamo un esempio:
<configuration>
<connectionStrings>
<add name="SgartDB" connectionString="Data Source=DebugSQLServer;Initial Catalog=MyDebugDB;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
...
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
nell'ambiente di
Release cambio la
connectionString e rimuovo l'attributo
debug:
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<connectionStrings>
<add name="SgartDB" connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
</connectionStrings>
<system.web>
<compilation xdt:Transform="RemoveAttributes(debug)" />
</system.web>
</configuration>
il file di trasformazione deve avere il namespace
xdt:
xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform
Il risultato, nel sito deployato in Release (normalmente su IIS), sarà un
nuovo file web.config generato dal
merge tra il web.config originale e le trasformazioni indicate nel web.Release.config:
<configuration>
<connectionStrings>
<add name="SgartDB" connectionString="Data Source=ReleaseSQLServer;Initial Catalog=MyReleaseDB;Integrated Security=True"
providerName="System.Data.SqlClient" />
</connectionStrings>
<system.web>
<compilation targetFramework="4.0">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
...
</system.web>
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
</system.webServer>
</configuration>
quindi con un altra connectionString e senza l'attributo debug.
Per vedere tutte le possibilià offerte dalla
web.config Transformation fai riferimento a questo articolo
Sintassi di trasformazione di Web.config per la distribuzione di un progetto di applicazione Web