如何在C#代码中读取Azure Pipeline中设置的环境变量?
Azure Pipeline中SpecFlow任务读取PowerShell设置的环境变量问题
不行,默认情况下你这么设置的环境变量没法在后续SpecFlow任务的C#代码里读取。
原因
Azure Pipeline里的每个任务都是独立运行的进程,你在PowerShell任务里通过$env:MY_VARIABLE = "$(my-value)"设置的是当前PowerShell进程的进程级环境变量,这个变量只在当前PowerShell进程生命周期内有效。任务执行完毕后进程销毁,变量也随之消失,后续的SpecFlow任务是另一个独立进程,自然访问不到这个变量。
解决方法
有两种常用方式可以让后续任务拿到这个值:
1. 输出为Azure Pipeline作业级变量
修改PowerShell脚本,把变量值输出为Pipeline的作业级变量,后续所有任务都能引用,且Azure会自动把这个变量注入到任务进程的环境变量中:
- task: PowerShell@2 inputs: targetType: 'inline' script: | $myValue = "$(my-value)" # 输出为Pipeline变量 Write-Host "##vso[task.setvariable variable=MY_VARIABLE;]$myValue" $myValue >> test.txt
之后在SpecFlow任务的C#代码里,直接通过环境变量读取即可:
using System; var myVariable = Environment.GetEnvironmentVariable("MY_VARIABLE");
2. 从test.txt文件读取
既然已经把值写入了test.txt,后续SpecFlow任务的C#代码可以直接读取这个文件的内容:
using System.IO; // 确保文件路径正确,若test.txt在发布的工件里,需先下载工件到当前工作目录 var myVariableValue = File.ReadAllText("test.txt").Trim();
内容的提问来源于stack exchange,提问作者user1207289
相关产品推荐
相关产品推荐

