automatic set of assembly version in csproj via task

307 Views Asked by At

I want to set Assembly Version of C# project in csproj file with a self generated task.

I want to set Assembly Version to:

  Major Version -> Project version: for example 3

  Minor Version -> 0

  Build Number -> Year + Calendarweek

  Revision -> Current day of week

My idea was the following code. But currently it is not working. Any ideas what I should change?

 <UsingTask TaskName="DetectAssemblyVersion" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.v4.0.dll">
    <ParameterGroup>
      <Result ParameterType="System.String" Output="true" />
    </ParameterGroup>
    <Task>
      <Code Type="Fragment" Language="cs">
        <![CDATA[
        string year = System.DateTime.Now.ToString("yy");
        
        int dayOfWeek = (int) System.DateTime.Now.DayOfWeek;
        
        System.Globalization.DateTimeFormatInfo dfi = System.Globalization.DateTimeFormatInfo.CurrentInfo;  
        System.Globalization.Calendar cal = dfi.Calendar;                                  
        string calendarWeek =         cal.GetWeekOfYear(System.DateTime.Now, dfi.CalendarWeekRule,
                                          dfi.FirstDayOfWeek).ToString();
                                          
                                          
        Result = "3.0." +  year + calendarWeek + "."+ dayOfWeek.ToString();
        Log.LogMessage(MessageImportance.High, "detect of current version: " + Result);
        ]]>
      </Code>
    </Task>
  </UsingTask>
  <Target Name="TestBuild" AfterTargets="Build">
    <DetectAssemblyVersion>
      <Output PropertyName="AssemblyVersion" TaskParameter="Result" />
    </DetectAssemblyVersion>
    <Message Importance="high" Text="new version: $(AssemblyVersion)" />

  </Target>
0

There are 0 best solutions below