Белка Powershell не создает файл Setup.exe
У меня на сервере сборки работает следующий скрипт PowerShell
Write-Host "Current Path $env:Agent_BuildDirectory"
Write-Host "Build Number $env:Build_BuildNumber"
$squirrel = "$env:BUILD_SOURCESDIRECTORY\packages\squirrel.windows.*\tools\Squirrel.exe"
$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
}
Он работает и создает только nupkg
в .\Releases
папка. Если я бегу так же --releasify
Команда в экземпляре Visual Studio на моем агенте сервера сборки создает все setup.exe
а также Releases
файл. Почему этот сценарий PowerShell не работает так же, как команда, запускаемая в окне NuGet PowerShell в VS?
2 ответа
Я не играл с Белкой, так что это может не сработать; но слишком много кода здесь, чтобы просто отправить как комментарий...
Попробуй это:
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
(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`""
Надеюсь, что это помогает, но, к сожалению, я очень догадываюсь об этом; извиняюсь.
Обновить
Получение последней версии; принимая звездочку на пути 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'
Я нашел ответ здесь
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") | %{
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'
Set-Alias Squirrel $squirrel
$releaseDir = '.\Releases'
$nugetPackFile = ".\MyApp\MyApp.$env:Build_BuildNumber.nupkg"
Write-Host $squirrel
Write-Host $nugetPackFile
if((Test-Path $nugetPackFile) -and (Test-Path $squirrel)) {
Squirrel --releasify $nugetPackFile --releaseDir $releaseDir | Write-Output
}
Большое спасибо @JohnLBevan за помощь в исправлении моего кода powershell.