在.NET函数调用中使用另一个PropertyReferences项的MSBuild语法

在.NET函数调用中使用另一个PropertyReferences项的MSBuild语法,msbuild,Msbuild,我想定义一个Timestamp属性,并使用它来驱动其他几个属性的值,如下所示: <PropertyGroup> <TrapHouseBuildToolsPath>..\TrapHouse.Build.NetStandard\bin\$(Configuration)\netstandard2.0\publish\TrapHouse.Build.NetStandard.dll</TrapHouseBuildToolsPath> <Ti

我想定义一个
Timestamp
属性,并使用它来驱动其他几个属性的值,如下所示:

   <PropertyGroup>
    <TrapHouseBuildToolsPath>..\TrapHouse.Build.NetStandard\bin\$(Configuration)\netstandard2.0\publish\TrapHouse.Build.NetStandard.dll</TrapHouseBuildToolsPath>

    <Timestamp>$([System.DateTime]::Now.ToUniversalTime()))</Timestamp>
    <DeploymentEnvironment>LOCALDEV</DeploymentEnvironment>
    <TrapHouseVersion>$(DeploymentEnvironment)$([System.String]::Format("{0:yyyyMMddHHmmss}", Timestamp)</TrapHouseVersion>
  </PropertyGroup>
很明显,我没有掌握正确的语法,但我很难找到这类东西的好资源


要使
TrapHouseVersion
正确计算,我需要做什么?

首先,您在末尾缺少一个右括号,但也知道属性不会作为
DateTime
持久化,但属性只存储为字符串,因此以后不能使用
String.Format
(除了解析
$(时间戳)
DateTime
再次):


感谢您提供的信息和解决方案。我没有意识到属性仅存储为字符串,因此我想我需要再次解析时间戳作为日期。此外,感谢您提供了确定属性值的简便方法。除此之外:请注意,当您开始基于版本时(也可能是汇编和NuGet版本)在几秒钟内,您将得到可能永远不会是“最新”的项目,并且总是有很高的构建时间。就我个人而言,我尝试基于提交计数(例如使用)感谢您的推荐-这很有意义。很遗憾,我在这个项目中使用mercurial,但可能有类似的工具可用。既然我得到了您的关注,我想问另一个问题-如果您的自定义任务在另一个项目中位于同一个解决方案中,那么引用程序集或命名空间的最佳方式是什么你需要吗?我试着做一个项目引用并使用
AssemblyName
,但它不起作用-只有通过发布库项目并通过
AssemblyFile
引用,它似乎才能找到它,这取决于项目中需要任务的位置。如果它可以在
ResolveProjectReferences
之后运行,请使用p2p引用(使用
ReferenceOutputAssembly=“false”
)可以使用,并且您可以硬编码一些目标路径到其他项目的输出。但是我建议将任务开发完全分离到一个单独的解决方案中,并通过NuGet分发。这样更容易(例如)
4.5.0-LOCALDEV$([System.String]::Format("{0:yyyyMMddHHmmss}", Timestamp)
<Project DefaultTargets="PrintVersion">
   <PropertyGroup>
    <Timestamp>$([System.String]::Format("{0:yyyyMMddHHmmss}", $([System.DateTime]::Now.ToUniversalTime())))</Timestamp>
    <DeploymentEnvironment>LOCALDEV</DeploymentEnvironment>
    <TrapHouseVersion>$(DeploymentEnvironment)$(Timestamp)</TrapHouseVersion>
  </PropertyGroup>

  <Target Name="PrintVersion">  
    <Message Importance="high" Text="TrapHouseVersion: $(TrapHouseVersion)" />
  </Target>  
</Project>
$ dotnet msbuild
Microsoft (R) Build Engine version 15.8.169+g1ccb72aefa for .NET Core
Copyright (C) Microsoft Corporation. All rights reserved.

  TrapHouseVersion: LOCALDEV20181012171759