我正在尝试注入一个数字 Linux 时间值(即自 Linux 纪元开始以来的秒数),用于在 C++ 项目中将构建作为预处理器定义进行构建。下面的代码适用于
BUILD_YEAR
,但对于 BUILD_DATETIME
我收到一条错误,提示 Subtract
要么不存在,要么是静态的,这两者似乎都不正确。这是错误的做法吗?它似乎是有效的 C#,但我找不到目标文件实际支持的语言的任何文档。
我知道有一些方法可以将
__TIME__
处理为数值,但这似乎应该是更合适的方法。
无效的静态方法调用语法:“.Subtract([System.DateTime]::UnixEpoch).TotalSeconds”。未找到方法“System.DateTime.Subtract”。静态方法调用应采用以下形式:$([FullTypeName]::Method()),例如$([System.IO.Path]::Combine(
,a
)).检查所有参数是否已定义、类型是否正确以及是否以正确的顺序指定。b
<Project ToolsVersion="16.5" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<!-- All Builds -->
<BUILD_YEAR>$([System.DateTime]::Now.ToString("yyyy"))</BUILD_YEAR>
<BUILD_DATETIME>$([System.DateTime]::Now.Subtract([System.DateTime]::UnixEpoch).TotalSeconds)</BUILD_DATETIME>
</PropertyGroup>
<ItemGroup>
<!-- Note: This will ultimately come from the same path as Version.rc -->
<ClCompile">
<PreprocessorDefinitions>BUILD_YEAR="$(BUILD_YEAR)";BUILD_DATETIME=$(BUILD_DATETIME);%(PreprocessorDefinitions)</PreprocessorDefinitions>
</ClCompile>
</ItemGroup>
</Project>
<PropertyGroup>
<!-- All Builds -->
<BUILD_YEAR>$([System.DateTime]::Now.ToString("yyyy"))</BUILD_YEAR>
<BUILD_DATETIME>$([System.DateTime]::Now.Subtract($([System.DateTime]::UnixEpoch)).TotalSeconds)</BUILD_DATETIME>
</PropertyGroup>
嵌套属性函数需要包含在其自己的
$()
中。
请参阅 MSBuild 文档中的嵌套属性函数。