Colourblind

Welcome to Colourblind.

This is the personal web space of Tom Milsom. As much as possible everything is free (as in speach and as in beer).


Make text: Smaller Bigger

Adding Subversion Revision Numbers to your .NET NANT Builds

Posted by Tom on 02/12/2009 21:47:28

If you use .NET, Subversion and NAnt as your personal constellation of technologies then you've probably found yourself wondering if you can tie the lot together and have NAnt include your Subversion revision number in as the version number of your assembly. I've tried a few different approaches over the years and settled on this one (for now!)

The clever bit of the code (the part which actually grabs the revision number and gets it into NAnt) has been leeched wholesale from Jonathan Malek, with the added twist that it creates a C# file with the required attributes in it.

<?xml version="1.0"?>
<project name="SetVersion" default="all" basedir="../../">

    <target name="compile.setversion">

        <property name="svn.revision" value="0"/>
        <exec
            program="svn"
            commandline='log "${project.src.dir}" --xml --limit 1'
            output="${project.src.dir}\_revision.xml"
            failonerror="true" />
        <xmlpeek
            file="${project.src.dir}\_revision.xml"
            xpath="/log/logentry/@revision"
            property="svn.revision"
            failonerror="true" />
        
        <echo file="${project.src.dir}\Version.cs" append="false" message="
            [assembly: System.Reflection.AssemblyVersion("1.0.${svn.revision}")]
            [assembly: System.Reflection.AssemblyFileVersion("${svn.revision}")]" />
        
    </target>
</project>

That sits in its own file. Then, whenever we need to stuff a version number into an assembly we simply make sure we're including it:

<include buildfile="etc/nant/SetVersion.build" />

and call it just before our csc task:

<property name="project.src.dir" value="project/src" />
<call target="compile.setversion" />
<csc target="library" output="${out.dir}/${project.name}.dll">
    <sources>
        <include name="${project.src.dir}/**/*.cs" />
    </sources>
</csc>

Job done!

Tags: dotNet, NAnt, SVN

Comments

Add Comment




Good luck with that

Please type the characters from the image above into the box below
or click here to get a new one


Submit