Search code examples
c#.netvisual-studiomsbuildcsproj

How do I get the difference between two dates in a .csproj file?


I saw some code like this, in a csproj file

$([System.DateTime]::UtcNow.ToString(mmff))

to autoincrement the assembly version:

<VersionSuffix>2.0.0.$([System.DateTime]::UtcNow.ToString(mmff))</VersionSuffix>
<AssemblyVersion Condition=" '$(VersionSuffix)' == '' ">0.0.0.1</AssemblyVersion>

What kind of language/script is that? How do I use it to get the difference between two dates?

I tried to do something like this:

<VersionMajor>2</VersionMajor>
<VersionMinor>1</VersionMinor>
<DaysFromLastRelease>$(([System.DateTime]::UtcNow - new [System.DateTime](2021,1,1))::TotalDays)</DaysFromLastRelease>

but it does not work :)


Solution

  • .csproj files are basically MSBuild files (XML). The embedded syntax you are referring to is called a Property Function.

    It appears that subtraction using the minus (-) might not be supported. There is a Subtract() property function in Property Functions.

    Perhaps this could be the base for a solution. I have not tried it!

    <Now>$([System.DateTime]::UtcNow.DayOfYear)</Now>
    
    <January>$([System.DateTime]::new(2021,1,1)).DayOfYear</January>
    <!-- or... (not sure about the below)
    <January>$([System.DateTime]::Parse("1/1/2021").DayOfYear)</January>
     -->
    
    <DaysFromLastRelease>$([MSBuild]::Subtract($(Now), $(January)))</DaysFromLastRelease>
    

    Other possibilities

    • calculate the date difference by writing an MSBuild task
    • call out to a simple program you write
    • somehow use an external program to set an environment variable, and then reference that variable in your .csproj