Posts Tagged ‘MSBuild’

MSBuild: ZIP mit Versionsnummer

Thursday, September 4th, 2008

Um in einem MSBuild File eine ZIP Datei zu erstellen kann man die Community Task von http://msbuildtasks.tigris.org/ verwenden. Das sieht dann folgendermaßen aus (Danke an Ben Hall!):


<Target Name="Zip">
    <PropertyGroup>
        <BuildDir>$(MSBuildProjectDirectory)\MeinService</BuildDir>
    </PropertyGroup>


 

    <ItemGroup>
        <!-- DLL, EXE, PDB, *.config, keine *.vhost.exe -->
        <ZipFiles Include="$(BuildDir)\bin\Debug\**\*.dll" />
        <ZipFiles Include="$(BuildDir)\bin\Debug\**\*.exe" Exclude="*.vhost.exe" />
        <ZipFiles Include="$(BuildDir)\bin\Debug\**\*.pdb" />
        <ZipFiles Include="$(BuildDir)\bin\Debug\**\*.config" />
    </ItemGroup>

    <MakeDir Directories="$(BuildDir)\Builds"
        Condition="!Exists('$(BuildDir)\Builds')" />
    <Zip Files="@(ZipFiles)"
        WorkingDirectory="$(BuildDir)\bin\Debug\"
        ZipFileName="$(BuildDir)\Builds\MeinService.zip"
        ZipLevel="9" />
</Target>
 
Nun möchte ich noch die Versionsnummer einer der Assemblies im Dateinamen der ZIP Datei verwenden. Im Web findet man reichlich Hinweise auf Lösungen bei denen die Versionsnummer während des Build Prozess aktualisiert wird. Ich möchte aber die Versionsnummer in einer AssemblyInfo.cs Datei vorgeben und diese im Build Prozess weiterverwenden.
 
Dazu benötigt man weitere MSBuild Tasks:
http://www.codeplex.com/sdctasks. Darin ist nämlich der Task VersionNumber.LoadFileVersion enthalten mit dem man die Assembly Version aus einer DLL oder EXE auslesen kann. Das Ergebnis sieht dann wie folgt aus:
 
<Target Name="Zip">
    <PropertyGroup>
        <BuildDir>$(MSBuildProjectDirectory)\MeinService</BuildDir>
    </PropertyGroup>

    <ItemGroup>
        <!-- DLL, EXE, PDB, *.config, keine *.vhost.exe -->
        <ZipFiles Include="$(BuildDir)\bin\Debug\**\*.dll" />
        <ZipFiles Include="$(BuildDir)\bin\Debug\**\*.exe" Exclude="*.vhost.exe" />
        <ZipFiles Include="$(BuildDir)\bin\Debug\**\*.pdb" />
        <ZipFiles Include="$(BuildDir)\bin\Debug\**\*.config" />
    </ItemGroup>

    <VersionNumber.LoadFileVersion
        FileName="$(BuildDir)\bin\Debug\MeinService.exe"
        VersionNamePath="$(BuildDir)\bin\Debug\">
        <Output TaskParameter="VersionNumber" PropertyName="versionNumber" />
    </VersionNumber.LoadFileVersion>

    <MakeDir Directories="$(BuildDir)\Builds"
        Condition="!Exists('$(BuildDir)\Builds')" />

    <Zip Files="@(ZipFiles)"
        WorkingDirectory="$(BuildDir)\bin\Debug\"
        ZipFileName="$(BuildDir)\Builds\MeinService.$(VersionNumber).zip"
        ZipLevel="9" />
</Target>
 
Das Einbinden der zusätzlichen MSBuild Tasks ist jeweils bei den Installationsanleitungen beschrieben und nicht weiter schwierig.
 
Technorati-Tags: ,