如何获取 .csproj 文件中两个日期之间的差异?
How do I get the difference between two dates in a .csproj file?
我在 csproj 文件中看到了一些 code like this
$([System.DateTime]::UtcNow.ToString(mmff))
自动增加程序集版本:
<VersionSuffix>2.0.0.$([System.DateTime]::UtcNow.ToString(mmff))</VersionSuffix>
<AssemblyVersion Condition=" '$(VersionSuffix)' == '' ">0.0.0.1</AssemblyVersion>
那是什么language/script?我如何使用它来计算两个日期之间的差异?
我试过这样做:
<VersionMajor>2</VersionMajor>
<VersionMinor>1</VersionMinor>
<DaysFromLastRelease>$(([System.DateTime]::UtcNow - new [System.DateTime](2021,1,1))::TotalDays)</DaysFromLastRelease>
但它不起作用:)
.csproj
文件基本上是 MSBuild files (XML). The embedded syntax you are referring to is called a Property Function.
似乎不支持使用减号 (-
) 的减法。 Property Functions.
中有一个Subtract()
属性函数
也许这可以作为解决方案的基础。我没试过!
<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>
其他可能性
- 通过编写 MSBuild 任务计算日期差异
- 调用您编写的简单程序
- 以某种方式使用外部程序设置环境变量,然后在您的
.csproj
中引用该变量
这对我有用:
<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>
这里我手动设置了VersionMajor和VersionMinor。然后我有补丁和修订的自动增量值。
- 补丁:自 2001 年 1 月 1 日(二十一世纪的第一天)以来的天数。
- 修订:一天的总分钟数
直到 2180 年 6 月,这已经足够了(记住最大版本号是 65534)。
额外提示:
我将所有这些行放入 Properties 文件夹中的 Version.Build.props 文件中。然后我使用这个标签从 csproj 文件导入它:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Version.Build.props', '$(MSBuildThisFileDirectory)/Properties/'))" />
这样,我可以在我的 csproj 文件中手动设置 proyect 版本,通过设置 VersionMajor 和 VersionMinor 将它们保留在 auto 或它们的混合,这是我实际做的。
我在 csproj 文件中看到了一些 code like this
$([System.DateTime]::UtcNow.ToString(mmff))
自动增加程序集版本:
<VersionSuffix>2.0.0.$([System.DateTime]::UtcNow.ToString(mmff))</VersionSuffix>
<AssemblyVersion Condition=" '$(VersionSuffix)' == '' ">0.0.0.1</AssemblyVersion>
那是什么language/script?我如何使用它来计算两个日期之间的差异?
我试过这样做:
<VersionMajor>2</VersionMajor>
<VersionMinor>1</VersionMinor>
<DaysFromLastRelease>$(([System.DateTime]::UtcNow - new [System.DateTime](2021,1,1))::TotalDays)</DaysFromLastRelease>
但它不起作用:)
.csproj
文件基本上是 MSBuild files (XML). The embedded syntax you are referring to is called a Property Function.
似乎不支持使用减号 (-
) 的减法。 Property Functions.
Subtract()
属性函数
也许这可以作为解决方案的基础。我没试过!
<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>
其他可能性
- 通过编写 MSBuild 任务计算日期差异
- 调用您编写的简单程序
- 以某种方式使用外部程序设置环境变量,然后在您的
.csproj
中引用该变量
这对我有用:
<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>
这里我手动设置了VersionMajor和VersionMinor。然后我有补丁和修订的自动增量值。
- 补丁:自 2001 年 1 月 1 日(二十一世纪的第一天)以来的天数。
- 修订:一天的总分钟数
直到 2180 年 6 月,这已经足够了(记住最大版本号是 65534)。
额外提示: 我将所有这些行放入 Properties 文件夹中的 Version.Build.props 文件中。然后我使用这个标签从 csproj 文件导入它:
<Import Project="$([MSBuild]::GetPathOfFileAbove('Version.Build.props', '$(MSBuildThisFileDirectory)/Properties/'))" />
这样,我可以在我的 csproj 文件中手动设置 proyect 版本,通过设置 VersionMajor 和 VersionMinor 将它们保留在 auto 或它们的混合,这是我实际做的。