MSBuild 属性作为 VSTS 构建定义中的变量

MSBuild properties as variables in VSTS build definitions

有没有办法将我的 MSBuild 属性(来自 .props 文件)作为 Visual Studio Team Services 中构建定义中的变量?

如果它有内置方式,我会喜欢它,但我可以接受扩展。

这可以通过创建一个 msbuild 项目(或现有项目中的目标)来完成,该项目以 VSTS logging commands 的形式记录包含所需属性的消息。但是 MSBuild 不能 "enumerate" 定义属性,因此这仅适用于众所周知的属性 - 这可能有助于避免意外冲突(即使环境变量在 MSBuild 中 "properties")。

给定样本 some.props 文件:

<Project>
  <PropertyGroup>
    <PackageId>a.package.id</PackageId>
    <Version>1.2.3</Version>
    <Description>I am your test project</Description>
  </PropertyGroup>
</Project>

还有一个例子emitvars.proj:

<Project>
  <Import Project="some.props" />
  <Target Name="Build">
    <Message Importance="high" Text="##vso[task.setvariable variable=PackageId]$(PackageId)" />
    <Message Importance="high" Text="##vso[task.setvariable variable=Version]$(Version)" />
    <Message Importance="high" Text="##vso[task.setvariable variable=Description]$(Description)" />
  </Target>
</Project>

此项目文件然后可以 "built" 在 MSBuild 任务中(或 dotnet msbuild 在 linux 机器上使用 .NET Core 工具):

出于演示目的,我添加了一个使用这些变量的 PowerShell 任务:

构建然后按预期使用脚本中的变量。请注意,设置变量的日志行可能不会显示在构建日志中。