Sfruttare msbuild per differenziare il config

di Cristian Civera, in .NET Framework,

A partire dal .NET Framework 2.0 per eseguire le compilazioni dei progetti e delle soluzioni è stato introdotto un nuovo motore di nome msbuild. Il tool, incluso nel .NET Framework, è alla base dei tool di sviluppo, primo tra tutti Visual Studio, i quali sono solo un'interfaccia per la preparazione di file con estensione .csproj, .vbproj o più in generale .proj. Questi file possono essere creati anche manualmente e processati attraverso il tool a riga di comando msbuild.exe

Questo strumento è stato pensato in modo che in funzione di task, proprietà ed elementi, venga prodotto un risultato. Nel caso di vbproj o csproj solitamente vengono compilati file vb o c# e prodotti gli assembly. E' possibile però modificare e estendere questi file, anche se creati e gestiti da Visual Studio, per aggiungere nuove funzionalità sfruttando i task preesistenti o personalizzati.

In questo script l'idea è partire quindi con qualcosa di semplice e fornire una funzionalità che manca in Visual Studio: differenziare i file config da utilizzare quando si effettua il build del progetto. Solitamente, infatti, creando un file app.config questo viene automaticamente copiato dando lo stesso nome dell'exe con il suffisso .config.

L'obbiettivo che si vuole raggiungere è inserire due file di nome App.debug.config e App.release.config e ad ogni compilazione, ottenere il file miapplicazione.exe.config nella cartella di debug o release a seconda del tipo di compilazione. Per ottenere questa automazione bisogna aprire il file vbproj/csproj con notepad o da Visual Studio, premendo prima "unload project" e poi "edit". All'interno del tag project basta inserire le seguenti righe in fondo al file:

<Target Name="AfterBuild">
  <Copy SourceFiles="App.$(Configuration).config"
        DestinationFiles="$(OutDir)$(TargetFileName).config" />
</Target>

Il target di nome AfterBuild è invocato automaticamente al termine della compilazione e in questa fase viene utilizzato il task Copy per copiare il file di configurazione nella cartella di destinazione. Per automatizzare il tutto vengono usate diverse proprietà:

  • $(Configuration): indica se la compilazione avviene con la configurazione di debug o release (o altre personalizzate);
  • $(OutDir): indica la cartella di destinazione della compilazione;
  • $(TargetFileName): indica il nome dell'assembly/exe.

Salvando e riaprendo il progetto in Visual Studio è possibile procedere con la normale compilazione e ottenere il file di configurazione. Questo è solo un piccolo di esempio che sfrutta Msbuild, ma questo tool è molto potente e permette di creare anche task più complessi. Ad esempio si potrebbe utilizzare una trasformazione XSLT per utilizzare un unico file di configurazione che cambia solo in alcune parti dell'intero config.

Commenti

Visualizza/aggiungi commenti

| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi