如何获取 .csproj 文件中两个日期之间的差异?

Ser*_*rge 5 .net c# msbuild csproj visual-studio

我在 csproj 文件中看到了一些这样的代码

$([System.DateTime]::UtcNow.ToString(mmff))
Run Code Online (Sandbox Code Playgroud)

自动增加程序集版本:

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

那是什么语言/脚本?我如何使用它来获取两个日期之间的差异?

我试图做这样的事情:

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

但它不起作用:)

Kit*_*Kit 5

.csproj文件基本上是MSBuild文件 (XML)。您所指的嵌入式语法称为Property Function

似乎-不支持使用减号 ( ) 进行减法。有一个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>
Run Code Online (Sandbox Code Playgroud)

其他可能性

  • 通过编写 MSBuild 任务计算日期差异
  • 调用您编写的简单程序
  • 以某种方式使用外部程序设置环境变量,然后在您的 .csproj

  • @OlivierRogier 它是 MSBuild,所以大概它可以在 VS 之外工作。 (2认同)

Ant*_*uez 5

这对我有用:

\n
<PropertyGroup>\n    <VersionMajor Condition="'$(VersionMajor)' == ''">0</VersionMajor>\n    <VersionMinor Condition="'$(VersionMinor)' == ''">0</VersionMinor>\n    <VersionPatch Condition="'$(VersionPatch)' == ''">$([System.DateTime]::UtcNow.Subtract($([System.DateTime]::new(2001,1,1))).TotalDays.ToString("0"))</VersionPatch>\n    <VersionRevision Condition="'$(VersionRevision)' == ''">$([System.DateTime]::UtcNow.TimeOfDay.TotalMinutes.ToString("0"))</VersionRevision>\n    <Version>$(VersionMajor).$(VersionMinor).$(VersionPatch).$(VersionRevision)</Version>\n</PropertyGroup>\n
Run Code Online (Sandbox Code Playgroud)\n

这里我手动设置VersionMajor和VersionMinor。然后我有补丁和修订的自动增量值。

\n
    \n
  • 补丁:自 2001 年 1 月 1 日(二十一世纪的第一天)以来的天数。
  • \n
  • 修订:当天的总分钟数
  • \n
\n

到 2180 年 6 月为止,这已经足够了(记住 m\xc3\xa1x versi\xc3\xb3n 编号是 65534)。

\n
\n

额外提示:\n我将所有这些行放入 Properties 文件夹中的 Version.Build.props 文件中。然后我使用以下标签从 csproj 文件导入它:

\n
<Import Project="$([MSBuild]::GetPathOfFileAbove('Version.Build.props', '$(MSBuildThisFileDirectory)/Properties/'))" />\n
Run Code Online (Sandbox Code Playgroud)\n

这样,我可以在我的 csproj 文件中手动设置项目版本,通过设置 VersionMajor 和 VersionMinor 将它们保留为自动或混合使用,这就是我实际所做的。

\n