msbuild 引用一个环境变量

msbuild refer to a env variable

为了自动化构建,我使用了一个 props 文件,其中包含可能(也可能不)在计算机中的路径环境变量的名称。 (希望以后可以加条件)

我的道具文件是这样的:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <MyVersion>EnvVarPath</MyVersion>
  </PropertyGroup>
</Project>

然后我将该道具文件导入到我的 csproj 文件中,并使用复制任务复制一个试图使用 $(MyVersion) 的文件,如下所示:

  <Target Name="Copy1File" AfterTargets="Build">
    <Message Text="$(MyVersion)" Importance="high" />
    <Copy
      SourceFiles="$(ProjectDir)File.xml"
      DestinationFolder="$(MyVersion)folder\File.xml"
    />

MyVersion var 的计算结果为“EnvVarPath”字符串,但不是 env 变量的值。我也尝试在 props 文件中使用 %EnvVarPath%,但它也评估为“%EnvVarPath%”(可以复制到文件资源管理器并起作用),但不评估为 msbuild 的路径本身。

如何在我的构建中获取该路径值?

如评论中所述,所有环境变量都自动作为属性提供 - 因此 $(windir) 应该给出 windows 系统上 windows 目录的路径。

由于添加的间接寻址或环境变量名称在 MSBuild XML(例如 ProgramFiles(x86))中无效,因此可能无法始终使用内联,因此 ProgramFiles(x86) 上的必要静态方法=13=] 已经在 MSBuild 中被白化,可以像这样使用:

<PropertyGroup>
  <ProgramFilesVarPrefix>ProgramFiles</ProgramFilesVarPrefix>
  <ProgramFilesVarSuffix>(x86)</ProgramFilesVarSuffix>
  <ProgramFilesLocation>$([System.Environment]::GetEnvironmentVariable('$(ProgramFilesVarPrefix)$(ProgramFilesVarSuffix)'))</ProgramFilesLocation>
</PropertyGroup>

评估为(如 MSBuild 结构化日志查看器中所示):