【问题标题】:powershell nuget push fails without errorpowershell nuget push 失败且没有错误
【发布时间】:2015-08-29 12:30:35
【问题描述】:

我昨天开始使用 powershell,与批处理相比它的简单程度让我感到惊讶。我可以通过在 google 上进行一些搜索来解决大多数问题,但在这种特殊情况下,我只是没有收到任何错误消息。

这是有问题的脚本:

https://github.com/taori/AjaxHub/blob/master/build/executePackaging.ps1

$apiKey = [IO.File]::ReadAllText("publish.apiKey.txt")

foreach ($package in $packages){
    [xml]$xml = Get-Content($package + ".nuspec")
    $version = $xml.package.metadata.version;

    "Setting up packacking for $package $version"

    $packagePath = ".\packages\$package\$version";

    If(Test-Path $packagePath){
        Remove-Item -Recurse -Force $packagePath
    }

    md -Force $packagePath

    $packArguments = "pack -Symbols -Version $version $package.nuspec -OutputDirectory $packagePath";
    "Packaging with Nuget.exe $packArguments"
    Start-Process -FilePath ".\Nuget.exe" -WindowStyle Hidden -ArgumentList $packArguments -ErrorAction Stop


    $pushArguments = "push $packagePath\$package.$version.symbols.nupkg $apiKey"
    "Pushing with Nuget.exe $pushArguments"

    Start-Process -FilePath ".\Nuget.exe" -WindowStyle Hidden -ArgumentList $pushArguments -ErrorAction Stop
    Start-Process -FilePath "https://www.nuget.org/packages/$package"
}

Read-Host -Prompt "Script done. Press <enter>"

只有推送部分不起作用(至少 nuget.org 上没有更新)或产生任何错误。有谁知道如何让它工作或抛出我可以处理的错误?

【问题讨论】:

  • 你在调用nuget.exe后查看$?的值是多少?
  • @briantist 没什么可悲的。试图从进程调用中分配返回值并输出它。
  • 您可以尝试将.\Nuget.exe 运行为&amp;Nuget.exe,它可能会干净地退出,但会在控制台上打印出您丢失的错误文本。一般来说,我会避免使用Start-Process 来启动命令行应用程序。

标签: powershell nuget


【解决方案1】:

事实证明,我的推送尝试存在多个问题。我不确定为什么我在普通调用中没有收到任何错误,但这有助于我显示它们:

Invoke-Expression "$nugetPath $pushArguments" -ErrorVariable $pushOutput
"pushOutput: $pushOutput";

有很多方法可以尝试从 cli 调用中捕获错误,但这个似乎是最简单的(并且似乎适用于异步调用错误)。不幸的是,特里先生的建议没有奏效。我也尝试了带有“2>&1”的版本,但这只是指出语法错误/没有返回任何内容。

我遇到的问题如下:

  • 我没有申请 - 等待打包命令
  • 因为我没有这样做,所以打包过程异步关闭
  • 我的推送尝试发生在打包过程完成之前 -> 找不到文件(我假设我没有收到错误,因为我的推送也是异步的)
  • dns 解析偶尔失败

没有错误的脚本状态:

$packages = @("AjaxHub.Core","AjaxHub.MVC5")

$apiKey = [IO.File]::ReadAllText("publish.apiKey.txt")

$nugetPath = ".\Nuget.exe";

Resolve-DnsName "www.nuget.org" -ErrorAction Stop | Out-Null
Resolve-DnsName "www.symbolsource.org" -ErrorAction Stop | Out-Null

foreach ($package in $packages){
    [xml]$xml = Get-Content($package + ".nuspec")
    $version = $xml.package.metadata.version;

    "Setting up packacking for $package $version"

    $packagePath = ".\packages\$package\$version";

    If(Test-Path $packagePath){
        Remove-Item -Recurse -Force $packagePath
    }

    md -Force $packagePath | Out-Null

    # todo add sources for -Symbols pack process
    #$packArguments = "pack -Symbols -Version $version $package.nuspec -OutputDirectory $packagePath";
    $packArguments = "pack -Version $version $package.nuspec -OutputDirectory $packagePath";
    "Packaging with Nuget.exe $packArguments"
    Start-Process -FilePath $nugetPath -WindowStyle Hidden -ArgumentList $packArguments -ErrorAction Stop -Wait

    $pushArguments = "push $packagePath\$package.$version.nupkg -ApiKey $apiKey -Timeout 60 -Verbosity normal"
    "Pushing with Nuget.exe $pushArguments" 
    Start-Process -FilePath $nugetPath -WindowStyle Hidden -ArgumentList $pushArguments -ErrorAction Stop -Wait

    Start-Process -FilePath "https://www.nuget.org/packages/$package"   

    "";
    "";
}

Read-Host -Prompt "Script done. Press <enter>"

【讨论】:

    猜你喜欢
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多