If you’re using SVN, you can very easily configure TeamCity to insert the commit revision number into the assembly by using the built-in AssemblyInfo Patcher with a pattern like 1.0.0.%build.vcs.number%
. This works because SVN and .NET both use integers for their version numbers.
Git, on the other hand, uses a 40-character SHA-1 string as a unique ID for commits. As you can see, this will not fit in a .NET assembly version:
Example git commit: c9d183c8570143142ca61c555360e7f0732efc09Example git commit (short version): c9d183c857Example .NET assembly version: 1.2.3.4
One place it will fit is the AssemblyInformationalVersion attribute, which accepts any string (thanks Joshka for the tip!). Here’s a quick MSBuild script to do it (using the AssemblyInfo task from MSBuild Community Tasks).
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <MSBuildCommunityTasksPath>packagesMSBuildTasks.1.3.0.528libnet20</MSBuildCommunityTasksPath> <!-- Use the short version of the git hash. --> <GitCommitShortHash>$(build_vcs_number.Substring(0, 7))</GitCommitShortHash> </PropertyGroup> <Import Project="$(MSBuildCommunityTasksPath)MSBuild.Community.Tasks.Targets"/> <Target Name="GenerateAssemblyInfo"> <AssemblyInfo CodeLanguage="CS" OutputFile="MyAppPropertiesAssemblyInfo.cs" AssemblyInformationalVersion="$(GitCommitShortHash)" /> </Target></Project>
Then in C# you can use something like the following to display it on startup or your About page:
public void Main(){ var gitCommit = Assembly.GetExecutingAssembly() .GetCustomAttributes(inherit: false) .OfType<AssemblyInformationalVersionAttribute>() .Single().Configuration; Console.WriteLine("My App starting up (git commit {0})", gitCommit); ...}
(Note Josh Flanagan has an alternative approach where he finds a way to convert the git commit into an int so you can use it in the AssemblyVersion).