2016-11-28 68 views
1

目前,我正在開發一個大的遺留項目,其中每個c#項目文件都在後期構建事件中具有複製作業(使用C#編寫的自定義工具)。如何將環境變量傳遞給解決方案構建步驟(構建vNext)

後生成事件看起來像

"$(MyEnvVar)\_Build\_Binaries\CopyTool" "$(TargetDir)$(TargetName)" "$(MyEnvVar)\_Binaries" 

正如你所看到的,複印作業的路徑是基於環境變量的值。

我現在想創建另一個引用上面提到的一些項目的解決方案。

構建失敗,因爲沒有爲構建設置環境變量。

在Build vNext定義構建步驟順序:

SETENV PowerShell腳本

[Environment]::GetEnvironmentVariable("MyEnvVar","Process") 
Write-Host 'build sources dir' 
Write-Host $Env:BUILD_SOURCESDIRECTORY 
[Environment]::SetEnvironmentVariable("MyEnvVar", $Env:BUILD_SOURCESDIRECTORY, "Process") 
  • 的Visual Studio生成步驟
  • Visual Studio的測試
  • ...(指數,發佈,複製,發佈文物)

但是在VS解決方案構建步驟執行的構建後事件中無法訪問「MyEnvVar」的值。

我該如何實現VS構建步驟的值已經在TFS onPremise上的powershell腳本中設置(而不是 VSO)?

回答

2

找到了解決辦法。

創建一個的powershell腳本

Write-Host 「##vso[task.setvariable variable=MY_BuildVariable]$Env:BUILD_SOURCESDIRECTORY」 

並執行它作爲第一生成步驟。

因爲構建變量與環境變量具有相同的名稱,所以環境變量的值將被powershell腳本的值覆蓋。

Environment variables其中規定
注:如果您在變量選項卡中定義的名稱相同的變量(例如PATH),那麼你的價值覆蓋,當你使用它,如上圖所示的環境變量。

0

在PowerShell中,您可以獲取或通過簡單地使用下面的方法設置任何環境變量:

#for a particular environmental variable 
Get-Childitem env:computername 
# for getting all the environmental variables 
get-childitem -path env:* 

#for Setting any value in any environmental variable 
$env:Variable1 ="value1" 

# For changing the vale of environmental variables 
Set-Item -path env:Variable1 -value "Value2" 
+0

對不起,但我不明白如何可以幫助我 – Khh

+0

@Khh:如果您可以提供腳本,在您傳遞MyEnvVar的值的位置,對我來說通過它很容易。 –

+0

我編輯了這個問題,複製作業是由一個工具完成的,而不是一個PowerShell腳本。 – Khh

相關問題