Я не играл с белкой, так что это может не сработать; но слишком много кода здесь, чтобы просто представить в качестве комментария ...
Попробуйте это:
Write-Host "Current Path $env:Agent_BuildDirectory"
Write-Host "Build Number $env:Build_BuildNumber"
$squirrel = Get-Item (Join-Path $env:BUILD_SOURCESDIRECTORY "packages\squirrel.windows.*\tools\Squirrel.exe") | select -First 1 -Expand FullName
$releaseDir = '.\Releases'
$nugetPackFile = ".\MyApp\MyApp.$env:Build_BuildNumber.nupkg"
Write-Host $squirrel
Write-Host $nugetPackFile
if((Test-Path $nugetPackFile) -and (Test-Path $squirrel)) {
$squirrelArg1 = "--releasify=`"$nugetPackFile`""
$squirrelArg2 = "--releaseDir=`"$releaseDir`""
& $squirrel $squirrelArg1 $squirrelArg2
}
Получение Squirrel.exe Path
(Join-Path $env:BUILD_SOURCESDIRECTORY "packages\squirrel.windows.*\tools\Squirrel.exe")
- здесь я использую Join-Path
, чтобы избежать какой-либо проблемы вокруг того, заканчивается или нет значение $env:BUILD_SOURCESDIRECTORY
в обратном слэше.
Get-Item
- Я положил это перед этим путем так, чтобы он разрешил путь к допустимому пути (т. Е. Выработал любые соответствия звездочки/подстановочного знака).
| select -First 1 -Expand FullName
Я затем добавить это, чтобы получить первый путь, который соответствует результату, и вернуть полный путь к файлу squirrel.exe
Передача параметров
Для приведенных ниже утверждений, я добавил двойные кавычки вокруг путей; иногда это необходимо для разъяснения того, к какому аргументу они относятся; особенно если на пути есть пробелы или специальные символы. Я также переключился с использования +
на перенос переменной в двойные кавычки, поскольку это упрощает объединение котировок внутри строки. Я использовал обратные ссылки на кавычки в строке, чтобы избежать этих символов.
$squirrelArg1 = "--releasify=`"$nugetPackFile`""
$squirrelArg2 = "--releaseDir=`"$releaseDir`""
Надежда, что помогает, но, к сожалению, это очень много догадок мною; Прости.
Update
Получение последней версии; при условии, что звездочка на пути packages\squirrel.windows.*\tools\Squirrel.exe
представляет номер версии в форме: Major
. Minor
. Build
.
$squirrel = Get-Item (Join-Path $env:BUILD_SOURCESDIRECTORY "packages\squirrel.windows.*\tools\Squirrel.exe") | %{
if ($_ -match '.*\\squirrel\.windows\.(?<Major>\d+)\.(?<Minor>\d+)\.(?<Build>\d+)\\tools\\Squirrel\.exe') {
(new-object -TypeName PSObject -Property $matches)
}
} | sort @{e={$_.Major};a=0}, @{e={$_.Minor};a=0}, @{e={$_.Build};a=0} | select -First 1 -ExpandProperty '0'
Извините за задержанный ответ, я догнал, а затем устал. Я сейчас пытаюсь это сделать. Один вопрос о команде «First» .... можно было бы сделать команду «Last», чтобы была выбрана папка с более высоким номером версии? – PlTaylor
Эти изменения, похоже, выполнили то же самое на сервере сборки, что и мой код. Они обновления, но не решить мою проблему с белкой. – PlTaylor
Hey @PlTaylor; жаль, что это не решило вашу проблему. Что касается '-Last'; абсолютно, что будет делать то, что вы хотите. т. е. '1,10 | выберите -Last 1' возвращает '10'. – JohnLBevan