문제 설명
.csproj 파일에서 두 날짜의 차이를 얻으려면 어떻게 해야 합니까? (How do I get the difference between two dates in a .csproj file?)
다음과 같은 코드를 보았습니다. , csproj 파일에서
$([System.DateTime]::UtcNow.ToString(mmff))
어셈블리 버전 자동 증가:
<VersionSuffix>2.0.0.$([System.DateTime]::UtcNow.ToString(mmff))</VersionSuffix>
<AssemblyVersion Condition=" '$(VersionSuffix)' == '' ">0.0.0.1</AssemblyVersion>
어떤 종류의 언어/스크립트인가요? 두 날짜의 차이를 얻으려면 어떻게 사용합니까?
다음과 같이 하려고 했습니다.
<VersionMajor>2</VersionMajor>
<VersionMinor>1</VersionMinor>
<DaysFromLastRelease>$(([System.DateTime]::UtcNow ‑ new [System.DateTime](2021,1,1))::TotalDays)</DaysFromLastRelease>
하지만 작동하지 않습니다 :)
참조 솔루션
방법 1:
.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
방법 2:
That's what worked for me:
<PropertyGroup>
<VersionMajor Condition="'$(VersionMajor)' == ''">0</VersionMajor>
<VersionMinor Condition="'$(VersionMinor)' == ''">0</VersionMinor>
<VersionPatch Condition="'$(VersionPatch)' == ''">$([System.DateTime]::UtcNow.Subtract($([System.DateTime]::new(2001,1,1))).TotalDays.ToString("0"))</VersionPatch>
<VersionRevision Condition="'$(VersionRevision)' == ''">$([System.DateTime]::UtcNow.TimeOfDay.TotalMinutes.ToString("0"))</VersionRevision>
<Version>$(VersionMajor).$(VersionMinor).$(VersionPatch).$(VersionRevision)</Version>
</PropertyGroup>
Here I manually set VersionMajor and VersionMinor. Then I have autoincremented values for Patch and revision.
- Patch : number of days since 2001/01/01 (first day of century XXI).
- Revision : total minutes of the day
That's good enought untill June 2180 (Remember máx versión number is 65534).
Extra tip: I put all this lines into a Version.Build.props file into Properties folder. Then I import it from csproj file with this tag:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Version.Build.props', '$(MSBuildThisFileDirectory)/Properties/'))" />
This way, I can manually set proyect versions manually in my csproj file, left them in auto or a mix of them by just setting VersionMajor and VersionMinor which is what I actually do.
(by serge、Kit、Antonio Rodríguez)