我在构建服务器上运行了以下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
}它会运行,并且只在.\Releases文件夹中创建一个nupkg。如果我在构建服务器代理的Visual Studio实例中运行相同的--releasify命令,它将创建所有的setup.exe和Releases文件。为什么这个PowerShell脚本的工作方式与在VS的NuGet PowerShell窗口中运行的命令不同?
发布于 2017-02-10 06:18:19
我没有玩过Squirrel,所以这可能不起作用;但这里的代码太多了,不能作为评论提交……
试试这个:
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来避免任何有关path的值是否以asterisk/wildcard).| select -First 1 -Expand FullName结尾的问题-我将此放在该路径之前,以便它将该路径解析为有效路径(即找出asterisk/wildcard).| 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'发布于 2017-02-13 23:22:34
我找到了答案here
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代码。
https://stackoverflow.com/questions/42147180
复制相似问题