2016-11-28 3 views
1

В настоящее время я работаю над большим наследием проекта, где каждый файл проекта C# имеет задание на копирование (с помощью специального инструмента, написанного на C#) в событии post build.Как передать переменную среды на этап построения решения (Build vNext)

Событие после сборки выглядит

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

Как вы можете видеть, путь для задания копирования на основе значения переменной окружения.

Теперь я хочу построить другое решение, которое ссылается на некоторые из упомянутых выше проектов.

Сбой сборки из-за того, что для сборки не задана переменная окружения.

Билд шаг порядок определения сборки 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 Test
  • ... (индекс , публиковать, копировать, публиковать артефакты)

Но значение «MyEnvVar» недоступно в событии пост-сборки, которое выполняется шагом VS Solution Build.

Как достичь того, что шаг сборки VS имеет значение, ранее заданное в сценарии powershell на TFS onPremise (не VSO)?

ответ

2

Найдено решение.

создал Powershell скрипт

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

и казнили его в качестве первого шага сборки.

Поскольку переменная build имеет то же имя, что и переменная среды, значение переменной среды перезаписывается значением сценария 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

Смежные вопросы