msbuild 引用一个环境变量
Posted
技术标签:
【中文标题】msbuild 引用一个环境变量【英文标题】:msbuild refer to a env variable 【发布时间】:2021-06-18 06:53:19 【问题描述】:为了自动化构建,我使用了一个带有路径环境变量名称的 props 文件,该路径环境变量可能(或可能不)在计算机中。 (希望以后能加个条件)
我的 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 的路径本身。
如何在我的构建中获得该路径值?
【问题讨论】:
尝试删除<MyVersion>EnvVarPath</MyVersion>
,因为它实际上覆盖了变量值。
感谢@VladimirSerykh,但如果我删除它,我无法自动化我需要更改每个版本的 env 版本,所以很遗憾,这不是一个选项
所有环境变量都作为属性公开。所以你不能只做<MyVersion>$(EnvVarPath)</MyVersion>
还是我错过了什么?如果确实有必要,您也可以在命令行/p:MyVersion=%EnvVarPath%
上传递参数,但不应该
谢谢pinkfloydx33。 正如 cmets 中提到的,所有环境变量都自动作为属性提供 - 所以$(windir)
应该提供 Windows 系统上 windows 目录的路径。
由于添加的间接或环境变量名称在 MSBuild XML 中无效(例如 ProgramFiles(x86)
),这可能并不总是可以使用内联,因此 System.Environment
上的必要静态方法已在 MSBuild 中被白化,并且可以这样使用:
<PropertyGroup>
<ProgramFilesVarPrefix>ProgramFiles</ProgramFilesVarPrefix>
<ProgramFilesVarSuffix>(x86)</ProgramFilesVarSuffix>
<ProgramFilesLocation>$([System.Environment]::GetEnvironmentVariable('$(ProgramFilesVarPrefix)$(ProgramFilesVarSuffix)'))</ProgramFilesLocation>
</PropertyGroup>
评估结果(如 MSBuild 结构化日志查看器中所示):
【讨论】:
以上是关于msbuild 引用一个环境变量的主要内容,如果未能解决你的问题,请参考以下文章