Procedura dettagliata: utilizzo di MSBuild - MSDN - Microsoft
Procedura dettagliata: utilizzo di MSBuild - MSDN - Microsoft

MICROSOFT VISUAL STUDIO: MSBuild

Programmazione - Visual Studio Visite: 5122

Vediamo alcuni piccoli consigli sul linguaggio di script della Microsoft: MSBuild. Vedremo come fare a sapere se una libreria (DLL) è a 32 bit o a 64 bit, vedremo come cancellare in sequenza dei file, vedremo come usare un tool esterno per creare uno zip, ...

 

 

 

Cos'è MSBuild?

Usiamo le parole della Microsoft:

" Microsoft Build Engine è una piattaforma per la compilazione di applicazioni.  Questo motore, anche noto come MSBuild, fornisce uno schema XML per un file di progetto che controlla il modo in cui la piattaforma di compilazione elabora e compila il software.  Visual Studio utilizza MSBuild, ma esso non dipende da Visual Studio. Richiamando msbuild.exe nel progetto o nel file della soluzione, è possibile orchestrare e compilare prodotti in ambienti in cui Visual Studio non è installato. " [citazione]

Così si configura il tipo di compilazione della Build:

 

<ItemGroup>
    <ConfigurationToBuild Include="Release|Any CPU">
      <FlavorToBuild>Release</FlavorToBuild>
      <PlatformToBuild>Any CPU</PlatformToBuild>
    </ConfigurationToBuild>
  </ItemGroup>

 

In questo esempio la Build compila in modalità "Release" e per "Any CPU".

 

Caricare una libreria esterna da usare all'interno dello script:

 

<UsingTask TaskName="MyClass.MyMethod" AssemblyFile="$(BuildDirectory)\Sources\....file path\MyClass.dll" />

...

<MyMethod ....insert here the params .... />

 

Impostare delle variabili per configurare le cartelle che verranno usate nello script:

 

<PropertyGroup>   
    <!-- Cartelle temporanee della Build -->
    <MioFolder>$(BuildDirectory)\MioFolder</MioFolder>

      
    <!--Cartelle cretate nel DropFolder -->
    <DropConnectors>package\MioDropFolder</DropConnectors>
   
    <!-- Cartelle che puntano a Tools usati per la creazione del pacchetto. Fanno riferimento alla macchina dove gira lo script -->
    <AntBaseDir>C:\apache-ant-1.8.1</AntBaseDir>
</PropertyGroup>

 

Di solito nel task AfterCompile si mettono tutti gli step che servono per la creazione vera e propria del pacchetto.

In questo task andiamo a vedere comesi usano i comandi più frequenti:

 

<Target Name="AfterCompile">

    <!-- Creare una cartella -->    
    <MakeDir Condition="!Exists('$(MioFolder)')" Directories="$(MioFolder)" />
 
    <!-- Eseguire un comando come da DOS PROMPT -->
    <!-- SI RIMUOVE L'ATTRIBUTO READONLY in maniera ricorsiva -->
    <Exec Command="attrib -r $(SolutionRoot)\Source\MioFolder\*.* /s"/>

 

   <!-- Comando Copy -->

   <Copy SourceFiles="$(SolutionRoot)\FromFolder\*.*" DestinationFolder="$(ToFolder)" />

 

   <!-- Esecuzione di Maven -->  

   <Exec Command="$(MavenBaseDir)\bin\mvn package -o -Dmaven.test.skip=true -f &quot;$(SolutionRoot)\Source\MioFolder\pom.xml&quot;" />
 

   <!-- Comando xCopy -->
    <Exec Command="xcopy &quot;FromFolder&quot; &quot;ToFolder&quot; /e /y /i" />

   <!-- Copy and Rename -->
    <Copy SourceFiles="FromFolder\MioFile.txt" DestinationFiles="ToFolder\MioNomeNuovoFile.txt" />
     
    <!-- Call di un target -->
    <CallTarget Condition="'$(MioParametro)'=='True'" Targets="MioTarget" />

 

<!-- Cancellazione mirata di più file -->
<ItemGroup>
    <DeleteFiles Include="mypath\myfile1" />
    <DeleteFiles Include="mypath\myfile2" />
    <DeleteFiles Include="mypath\myfile3" />    
</ItemGroup>
<Delete Files="@(DeleteFiles)" ContinueOnError="true"/>

 

<!-- Usare un tool esterno per creare un file zip -->
<Exec Command="$(SolutionRoot)\7za.exe a -tzip -r &quot;$(BuildDirectory)\MyFile.zip&quot; &quot;$(BuildDirectory)\MyPathToZip&quot; -mx5" />


  </Target>

Vediamo anche l'istruzione di delete:

<Exec Command="del &quot;MioFolder\MioFile&quot; /Q" />  

Il parametro /Q serve ad abilitare la "Modalità non interattiva".

 

LIBRERIA A 32BIT O A 64BIT

Come fare a sapere se una libreria è a 32 bit (x86) oppure a 64 bit (AMD64)?

Detto fatto:

 

dumpbin /headers <myPathToDLL> | findstr machine

 

Questo eseguibile lo trovate nelle cartelle di installazione di Visual Studio. Ad es:

C:\Programmi (x86)\Microsoft Visual Studio 12.0\VC\bin

 

 

Buon lavoro!