我没有玩过松鼠,所以这可能行不通;但是这里的代码太多,不能作为评论提交......
尝试这个:
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'