Как получить доступ к $(Build.BuildNumber) из другого проекта в tfs2015

Есть два проекта, например. Проект1 и Проект2. Теперь в project2 нам нужно создать определение выпуска, в котором нам нужно скопировать вывод сборки из определения сборки project1.

Проблема в том, что мы не могли предоставить артефакт, как в определении сборки Project1 в версии Project2.

Если бы мы могли получить доступ к переменной $(Build.BuildNumber) project1 из Project2, проблема будет решена.

Пожалуйста, предложите.

Спасибо.

2 ответа

Решение

Вы можете получить доступ к номеру сборки через REST API, простые шаги:

  1. Создайте новый файл сценария powershell в своем проекте с этим кодом:

Код:

Param(
    [string]$teamProject,
    [string]$collectionURL,
    [string]$buildId,
    [string]$userName,
    [string]$password
    )
$basicAuth = ("{0}:{1}" -f $userName,$password)
$basicAuth = [System.Text.Encoding]::UTF8.GetBytes($basicAuth)
$basicAuth = [System.Convert]::ToBase64String($basicAuth)
$headers = @{Authorization=("Basic {0}" -f $basicAuth)}
$url="$($collectionURL)$($teamProject)/_apis/build/builds/$($buildId)?api-version=2.0"
Write-Output $url
Function GetBuildNumber{
    $result = Invoke-RestMethod -Uri $url -headers $headers -Method Get
    Write-Output $result.buildNumber
    Write-Host "##vso[task.setvariable variable=anotherBuildNumber;]$($result.buildNumber)"
}
GetBuildNumber
  1. Проверьте в источник контроля
  2. Очередь строить и публиковать артефакты
  3. Изменить определение выпуска
  4. Добавьте эти переменные

введите описание изображения здесь

  1. Добавьте задачу PowerShell в определение своего выпуска.

    Имя файла сценария:[файл сценария powershell в артефакте, например, $(System.DefaultWorkingDirectory)/PowerShellVnext/TFS2015U2Solution/PowerShellModuleProject1/RestTest.ps1];

    Аргументы: -teamProject $(teamProject) -collectionURL $(System.TeamFoundationCollectionUri) -buildId $(buildId) -userName $(имя пользователя) -passwor $(пароль)

После этого значение номера сборки сохраняется в переменной anotherBuildNumber.

В настоящее время нет возможности связать другие артефакты сборки командного проекта в TFS, но в качестве обходного пути вы можете добавить задачу копирования файлов Windows Machine в определение выпуска Project2, чтобы скопировать артефакты из Project1. Этот вопрос для справки.

Просто , используйте немного магии отражения

var version = typeof(Program).Assembly
              .GetCustomAttribute<AssemblyFileVersionAttribute>().Version;

Вы можете заменить typeof([ClassName]) любым именем класса, которое хотите, чтобы получить версию даже из типов отражения. этот метод очень полезен при регистрации ошибок, поскольку вы также можете получить версии файлов из зависимых сборок, любого класса, который находится в области видимости.

Это не то, о чем вы просили, однако я уверен, что есть те, кому это тоже нужно... если вам нужна дата сборки, вы можете получить ее, используя:

var date = new FileInfo(typeof(Program).Assembly.Location).CreationTime;
Другие вопросы по тегам