Use SVN Revision to label build in CCNET

CruiseControl.Net 1.4.4 has now an Assembly Version Labeller, which generates version numbers compatible with .Net assembly properties.

In my project I have it configured as:

<labeller type="assemblyVersionLabeller" incrementOnFailure="true" major="1" minor="2"/> 

and then consume this from my MSBuild projects with MSBuildCommunityTasks.AssemblyInfo :

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/> 
<Target Name="BeforeBuild"> 
  <AssemblyInfo Condition="'$(CCNetLabel)' != ''" CodeLanguage="CS" OutputFile="Properties\AssemblyInfo.cs"  
  AssemblyTitle="MyTitle" AssemblyCompany="MyCompany" AssemblyProduct="MyProduct" 
  AssemblyCopyright="Copyright ©  2009" ComVisible="false" Guid="some-random-guid" 
  AssemblyVersion="$(CCNetLabel)" AssemblyFileVersion="$(CCNetLabel)"/> 
</Target> 
For sake of completness, it's just as easy for projects using NAnt instead of MSBuild:
<target name="setversion" description="Sets the version number to CruiseControl.Net label."> 
    <script language="C#"> 
        <references> 
                <include name="System.dll" /> 
        </references> 
        <imports> 
                <import namespace="System.Text.RegularExpressions" /> 
        </imports> 
        <code><![CDATA[ 
                 [TaskName("setversion-task")] 
                 public class SetVersionTask : Task 
                 { 
                  protected override void ExecuteTask() 
                  { 
                   StreamReader reader = new StreamReader(Project.Properties["filename"]); 
                   string contents = reader.ReadToEnd(); 
                   reader.Close(); 
                   string replacement = "[assembly: AssemblyVersion(\"" + Project.Properties["CCNetLabel"] + "\")]"; 
                   string newText = Regex.Replace(contents, @"\[assembly: AssemblyVersion\("".*""\)\]", replacement); 
                   StreamWriter writer = new StreamWriter(Project.Properties["filename"], false); 
                   writer.Write(newText); 
                   writer.Close(); 
                  } 
                 } 
                 ]]> 
        </code> 
    </script> 
    <foreach item="File" property="filename"> 
        <in> 
                <items basedir=".."> 
                        <include name="**\AssemblyInfo.cs"></include> 
                </items> 
        </in> 
        <do> 
                <setversion-task /> 
        </do> 
    </foreach> 
</target> 
 

发表评论

电子邮件地址不会被公开。