Azure devops 如何在Azure Dev Ops构建管道中访问Windows环境变量? P>我们的许多C++项目通过控制面板>系统和安全>系统>高级系统设置>环境变量>系统变量引用自定义环境变量集。这只是指向各种必需库的路径。例如,Key:LibraryLocation,Value:C:\libraries,在代码中由$(LibraryLocation)引用

Azure devops 如何在Azure Dev Ops构建管道中访问Windows环境变量? P>我们的许多C++项目通过控制面板>系统和安全>系统>高级系统设置>环境变量>系统变量引用自定义环境变量集。这只是指向各种必需库的路径。例如,Key:LibraryLocation,Value:C:\libraries,在代码中由$(LibraryLocation)引用,azure-devops,environment-variables,Azure Devops,Environment Variables,我假设这将自动找到,而无需将其定义为构建管道的一部分,但我们的构建失败,即使我在管道变量下添加此键值对的副本,或将其作为MSBuild参数: /p:LibraryLocation=$(LibraryLocation) //fails /p:LibraryLocation="C:\libraries" //fails 上述所有尝试都会在调试输出中产生以下结果: /IC:\libraries\Boost\v1.70.0\include //notice the lack of

我假设这将自动找到,而无需将其定义为构建管道的一部分,但我们的构建失败,即使我在管道变量下添加此键值对的副本,或将其作为MSBuild参数:

/p:LibraryLocation=$(LibraryLocation) //fails
/p:LibraryLocation="C:\libraries" //fails
上述所有尝试都会在调试输出中产生以下结果:

/IC:\libraries\Boost\v1.70.0\include //notice the lack of quotations
我还尝试将以下内容添加到管道变量中:

LibraryLocation = %LibraryLocation%
LibraryLocation = env:LibraryLocation
看起来“值”是管道变量中的一个文本,所以上面的所有操作都不起作用

这就好像Windows中定义的全局系统变量不存在一样

我试图寻找解决方案,但似乎构建管道中的所有内容都被视为“环境变量”,而“系统变量”有另一个似乎是预定义的含义。我阅读了使用PowerShell任务设置它的示例,但我不应该这样做,因为它已经设置好了

如何让构建管道识别操作系统中的这个自定义环境变量集

谢谢。

如文所述

环境变量特定于您使用的操作系统。它们以特定于平台的方式注入管道。该格式对应于为特定脚本平台格式化环境变量的方式

在UNIX系统(macOS和Linux)上,环境变量的格式为$NAME。在Windows上,批处理的格式为%NAME%,PowerShell中的格式为$env:NAME

系统和用户定义的变量也作为平台的环境变量被注入。当变量变为环境变量时,变量名变为大写,句点变为下划线。例如,变量名any.variable变为变量名$any_variable

您应该能够通过以下方式之一访问Windows环境变量:

  • %图书馆位置%
  • 环境:图书馆定位
这将适用于哪些操作系统,这取决于调用MSBuild的方式

您可以在bash步骤中检查调用
env | sort
的变量

当我从命令行脚本运行
%PATH%
时,我得到:

当我从powershell任务运行“$env:PATH”时:


原来是安装问题。正如我所理解的那样,虽然我正确设置了环境变量,但作业被提交到了一个不知道该环境变量的不同代理池。现在,在他们修复之后,正如我所怀疑的,无需定义管道变量,也无需执行任务来设置环境变量,因为它已被生成识别。

您使用的是microsoft hosted agent还是self hosted agent?@CeceDong MSFT它是一个self hosted agent。我阅读了该文档,但对它实际应用于何处感到困惑。我对添加到管道中的Bash、命令行或PowerShell任务不感兴趣。我在.vcxproj文件中嵌入了$(LibraryLocation),但在运行Visual Studio任务生成我的解决方案时,它当前无法识别。是否需要将$(LibraryLocation)=%LibraryLocation%添加到管道变量?或者有其他机制吗?我在命令行任务中向脚本添加了%PATH%,但失败了:##[error]Cmd.exe退出,代码为“1”。文字“%PATH%”刚刚输出。我在任务中看到“环境变量”下拉列表,但同样,这只是一个键值对。很高兴看到您的问题得到解决。请注意,这对阅读此帖子的其他社区成员是有益的。