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 结构化日志查看器中所示):
为了自动化构建,我使用了一个 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 结构化日志查看器中所示):