Visual Studio 2010 e web.config Trasformations
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).
Per generare i file di trasformazione è sufficiente cliccare sul file web.config con il tasto destro del mouse e selezionare Add Config Transforms.
Uno 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:
nell'ambiente di Release cambio la connectionString e rimuovo l'attributo debug:
il file di trasformazione deve avere il namespace xdt:
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:
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
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).
Text
web.config
web.Debug.config
web.Release.config
Attenzione: la trasformazione del web.config viene applicata solo quando si fa deploy quindi non funziona con il web server interno di Visual Studio 2010
Uno 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:
XML: web.config
<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>
XML: web.Release.config
<?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>
URL
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:
XML: web.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>
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