MSBuild la vita senza Visual Studio?

di Marco Leoncini, in asp.net,

ho ricordi molto sbiaditi, di quando frequentavo l'università di informatica, ma come come alcune cicatrici, alcuni concetti sono inderebili.
il professore di architettura degli elaboratori, era solito dire che è possibile programmare usando qualsiasi linguaggio, tutto sta nel vedere quanto sacrificio comporta...

dopo il mio post UserControl e MSBuild, nel fine settimana ho deciso di approfondire la conoscenza di MSBuild.
Se abbiamo usato una qualsiasi versione del Visual Studio 2005, anche senza saperlo abbiamo usato MSBuild è lui che si occupa di leggere le infomazioni contenute nel file *.(qualcosa)proj
e "orchestare" la costruzione del Software.
il formato del file di progetto è un semplice xml, facile da comprendere e da estendere.
alcuni elementi base del progetto sono:
Items:
solo l'elemteto di Imput per il processo di costruzione, sono raggruppare in una collezione definita dal nome stesso degli item, nel progetto vengono dichiarati come elmenti figlio di ItemGroup.

<ItemGroup>
<CSFile Include="test MsBuilds.cs"/>
</ItemGroup>
<ItemGroup>
<Reference Include="System.dll"/>
</ItemGroup>
all'interno del progetto è possibile accedere alla collezione di item tramite @(CSFile) 

Task
i task sono le unità che si occupano di del processo di costruzione, sono scritte in codice gestito, possiamo implementare i nostri task personalizzati, scivendo una classe che implementi l'interfaccia ITask.
i task vengono eseguiti creandoli come elementi figlio del tag Target.

<Target Name="Build">
<Csc Sources="@(CSFile)"
References="@(Reference)"
OutputAssembly="$(MSBuildProjectDirectory)\$(MSBuildProjectName).exe"
TargetType="exe" />
</Target>

in quesro caso il task da eseguire è l'esecuzione del compilatore C#.
$(MSBuildProjectDirectory) e $(MSBuildProjectDirectory) sono alcune proprietà riservate a MSBild,
possimao definire proprietà personalizzate; come per gli Items, le varie proprietà sono raggruppate in collezioni, definite dal nome stesso della proprietà.
nel progetto vinegono dichiarate come figli del tag PropertyGroup.

<PropertyGroup>
<BuildDir>Build</BuildDir>
</PropertyGroup>

Targets.
i Targets raggruppano i Task, sono il punto d'entrata del processo di costruzione.

dopo tante parole aprimao il fido notepad e sciviamo una semplicissima (a dire poco) applicazione console.

using System;
using System.IO;
namespace Test
{
public partial class MyConsole
{
public static void Main(string[] args)
{
String name = Console.ReadLine();
}
}
}
salviamola come test MsBuilds.cs.
sempre con il fido notepad creaimo il progetto MSBuild

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" >
<ItemGroup>
<CSFile Include="test MsBuilds.cs"/>
</ItemGroup>
<ItemGroup>
<Reference Include="System.dll"/>
</ItemGroup>

<Target Name="Build">
<Csc Sources="@(CSFile)"
References="@(Reference)"
OutputAssembly="$(MSBuildProjectDirectory)\$(MSBuildProjectName).exe"
TargetType="exe" />
</Target>
</Project>

lo salviamo assicuradoci che l'estensione sia *.proj
dal prompt dei comandi ci posizioniamo nella cartella che contiene il progetto e i file.
lanciamo MSBuild.exe ed il gioco è fatto, nella cartella troveremo l'applicazione prontà all'uso.

riallacciando al discorso iniziale, perche usare MSBuild, quando abbiamo la comoda iterfaccia del VS?
alcune volte perchè, semplicemente, non è importante dovre andremo, ma il tragitto che abbiamo percorso per arrivarci.
un esempio concreto, è utilizzate ILMerge (implementa l'interfaccia ITask) con compilare e riunire in un unico assembly gli UserControl, in modo da poterli riutilizzare con facilità

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.

Nella stessa categoria
I più letti del mese