среда, 27 июня 2007 г.

Задание версии и даты сборки при компиляции

Задание версии и даты сборки при компиляции

Недавно около часа гуглил как же запихнуть в AssemblyInfo ревизию SVN. Остановился было на сборнике MSBuild тасков, когда обнаружил замечательную утилиту SubWCRev из состава Tortoise SVN, которая вдобавок умеет вставлять еще и дату.

Используется это так:

    Создается шаблонный файл AssemblyInfo.template.cs следующего вида:
    AssemblyInfo.template.cs:


    [assembly: AssemblyDescription("Inductive UI Toolkit Test Application. Built at $WCDATE$.")]
    [assembly: AssemblyVersion("2.2.$WCREV$.*")]




    В файл проекта инклудится проектик, таргет BeforeBuild (описан в Microsoft.Common.targets) в котором будет выполняться понятно из его названия когда:


    MyProject.csproj:









    <Import Project="$(MSBuildProjectDirectory)\..\RevisionInfo.targets" />




    RevisionInfo.targets:









    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup>
    <SubWCRevDir>C:\Program Files\TortoiseSVN\bin</SubWCRevDir>
    </PropertyGroup>

    <!-- Sets AssemblyVersion value based on Subversion revision -->
    <Target Name="BeforeBuild" Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
    <Exec Command='"$(SubWCRevDir)\SubWCRev" $(MSBuildProjectDirectory)
    $(MSBuildProjectDirectory)\Properties\AssemblyInfo.template.cs
    $(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs' IgnoreExitCode="true"/>
    </Target>
    </Project>




    Студия довольно благосклонно отнеслась к правке файла проекта и теперь при Release-билде проекта будет создаваться новый AssemblyInfo.cs с нужными данными.