首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Squirrel Powershell文件未创建Setup.exe

Squirrel Powershell文件未创建Setup.exe
EN

Stack Overflow用户
提问于 2017-02-10 05:26:04
回答 2查看 799关注 0票数 2

我在构建服务器上运行了以下PowerShell脚本

代码语言:javascript
复制
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.exeReleases文件。为什么这个PowerShell脚本的工作方式与在VS的NuGet PowerShell窗口中运行的命令不同?

EN

回答 2

Stack Overflow用户

发布于 2017-02-10 06:18:19

我没有玩过Squirrel,所以这可能不起作用;但这里的代码太多了,不能作为评论提交……

试试这个:

代码语言:javascript
复制
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.

代码语言:javascript
复制
$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'
票数 2
EN

Stack Overflow用户

发布于 2017-02-13 23:22:34

我找到了答案here

代码语言:javascript
复制
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代码。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42147180

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档