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).

Text

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 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>
nell'ambiente di Release cambio la connectionString e rimuovo l'attributo debug:

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>
il file di trasformazione deve avere il namespace xdt:

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>
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
Tags:
C#236 Esempi225 Visual Studio37
Potrebbe interessarti anche: