Insert SVN version and Build number in your C# AssemblyInfo file
February 3, 2009 — Florent ClairambaultSoftware version number is quite important. It helps you track what versions have your users when they report something. And when it’s linked to an SVN version number, it’s even better.
Well, with MSBuild Community Task, you can easily automatically generate smart version numbers, you have to:
- Download MSBuildCommunityTasks
- Make sure your “svn.exe” binary is in C:\program files\subversion\bin
- Add this at the end of your .csproject file :
2011-07-02 update: As given in Markus comment, this code is a much better option:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- Import of the MSBuildCommunityTask targets --> <Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> <!-- to AssemblyInfo to include svn revision number --> <Target Name="BeforeBuild"> <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\VisualSVN\bin"> <Output TaskParameter="Revision" PropertyName="Revision" /> </SvnVersion> <FileUpdate Files="Properties\AssemblyInfo.cs" Regex="(\d+)\.(\d+)\.(\d+)\.(\d+)" ReplacementText="$1.$2.$3.$(Revision)" /> </Target |
You should only have a “</Project>” field left…
Then, you just have to open your project and build your project, it will fail once (missing version.txt file) and then work forever. This will generate your Assembly & AssemblyFile versions like this: Major.Minor.SvnVersion.BuildVersion
In your C# code, to get your version, you just have to add something like that:
1 2 3 4 5 | public static String Version { get { return System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString(); } } |
GD Star Rating
loading...
loading...

March 5, 2009 at 11:31 am
Hi, thanks for this article,
but does there is a way to compile the application even if SVN is not installed ?
Regards
loading...
March 8, 2009 at 10:33 am
The easiest way I could find is to add a condition on the SvnVersion tag :
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" Condition="Exists('$(ProgramFiles)\subversion\bin\svn.exe')">Your build number will be incremented and your SVN revision number won’t be fetched.
loading...
March 9, 2009 at 11:49 pm
Thanks, just what I was looking for!
I made a little change on configuration because my SVN binaries are located elsewhere.
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="$(ProgramFiles)\CollabNet Subversion Client">loading...
March 19, 2009 at 2:50 am
Interesting. But what do you do if the svn revision number goes over 65535 (i.e. the maximum for any of the 4 version number components) ?
loading...
March 19, 2009 at 9:38 am
Well, I really don’t know. I have never worked in a so big SVN Repository.
I think it might just generate a number with the $svnRev%65536.
loading...
April 27, 2009 at 1:19 pm
[...] Insert SVN version and Build number in your C# AssemblyInfo file [...]
June 15, 2009 at 12:25 am
Most of the people of my blog are coming for this post. I should really find a better solution. Something between the solution of “theKindOfMe” and mine.
It would be great to extract build number and svn revision number and just update the AssemblyVersion file without having to specify each property in the “csproj” file.
I should work on a clean solution to that problem. But that really isn’t fun to do because MSBuild XML language is not really comfortable.
loading...
February 8, 2010 at 7:12 pm
where can I find MSBuild.Community.Tasks.Targets?
loading...
February 14, 2010 at 11:20 pm
You have to download MsBuild Community Tasks here : http://msbuildtasks.tigris.org/
loading...
July 27, 2010 at 10:23 am
Hello, can you tell me which changes can be done to get the same for “*.vcproj” project file.
Tx in advance !
loading...
August 14, 2010 at 10:28 am
The .vcproj files don’t use the MSBuild format until Visual Studio 2010. And then my guess is that you can pretty much use the MSBuild vcproj file the same way.
I haven’t tested it because the only C++ I do is on Linux with some Makefile files.
loading...
August 16, 2010 at 8:06 am
But is a possibility to use versioning on the .vcproj projects? For instance i have a .dll created in .vcproj project and i want to have versioning on it.
loading...
August 19, 2010 at 9:43 pm
I really have no idea.
loading...
September 16, 2010 at 8:13 am
[...] Insert SVN version and Build number in your C# AssemblyInfo file – Florent Clairambault Insert SVN version and Build number in your C# AssemblyInfo file [...]
January 28, 2011 at 3:13 pm
[...] on the solution found on Florent Clairambault Blog here, I thought why not integrate it into the my Web Deployment Project? Let’s give it a chance [...]
February 28, 2011 at 5:42 pm
Hi, i’m trying to using this system.
i have a little problem. I try to change (from visual studio propertyes interface) minor and minor version.
i put the version to 1.1.svn.build.
When i run my application the version come back to 1.0.svn.build. How i can change the major and minor version?
Thank’s a lot and sorry for my english
loading...
June 16, 2011 at 8:41 pm
Note: This works but when you run the command, the version.txt file won’t contain your svn version. It just increments.
To check everything is working, go look at your AssemblyInfo.cs file. It should have the right svn number (it just won’t match what the version.txt file says).
This through me for a loop at first. Thought it might others as well.
Thanks for sharing however. Great solution. Cheers
loading...
June 30, 2011 at 11:48 am
Hi,
I found this page, which has a solution to the problem of rewriting AssambyInfo every time and instead update it:
http://thekindofme.wordpress.com/2009/04/27/svn-revision-number-as-version-nunmber-in-vs-through-a-build-target/
There this code is used:
<FileUpdate Files=”Properties\AssemblyInfo.cs”
Regex=”(\d+)\.(\d+)\.(\d+)\.(\d+)”
ReplacementText=”$1.$2.$3.$(Revision)” />
loading...