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:
"
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 "$(SolutionRoot)\Source\MioFolder\pom.xml"" />
<!-- Comando xCopy -->
<Exec Command="xcopy "FromFolder" "ToFolder" /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 "$(BuildDirectory)\MyFile.zip" "$(BuildDirectory)\MyPathToZip" -mx5" />
</Target>
Vediamo anche l'istruzione di delete:
<Exec Command="del "MioFolder\MioFile" /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!