控制台版本的 Nuget 在 Package.config 文件上出错

Console version of Nuget erroring out on Package.config file

我在 packages.config 文件上尝试 运行 nuget 时得到以下输出:

Feeds used:

  C:\Users\username\AppData\Local\NuGet\Cache
  https://api.nuget.org/v3/index.json
  C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\
`
Restoring NuGet package Selenium.RC.2.53.0.
Restoring NuGet package Selenium.Support.2.53.0.
Restoring NuGet package NUnitTestAdapter.2.0.0.
Restoring NuGet package NUnit.2.6.4.
Restoring NuGet package System.Threading.dll.1.0.2856.
Restoring NuGet package Selenium.WebDriver.2.53.0.
Restoring NuGet package Selenium.WebDriverBackedSelenium.2.53.0.
System.AggregateException: One or more errors occurred. --->    System.FormatException: Input string was not in a correct format.

这是 运行 在 Windows Server 2012 机器上,上面装有 jenkins。

我已经尝试按照此处所述注册 dll:

https://docs.nuget.org/Release-Notes/Known-Issues

这个命令:

regsvr32 "C:\Program Files (x86)\Common Files\microsoft shared\MSEnv\VsLangproj.olb"

上面的命令在我运行时没有失败,但也没有解决问题。

这是我的 packages.config 文件:

`<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="NUnit" version="2.6.4" targetFramework="net452" />
  <package id="NUnitTestAdapter" version="2.0.0" targetFramework="net452" />
  <package id="Selenium.RC" version="2.53.0" targetFramework="net452" requireReinstallation="true" />
  <package id="Selenium.Support" version="2.53.0" targetFramework="net452" requireReinstallation="true" />
  <package id="Selenium.WebDriver" version="2.53.0" targetFramework="net452" requireReinstallation="true" />
  <package id="Selenium.WebDriverBackedSelenium" version="2.53.0" targetFramework="net452" requireReinstallation="true" />
  <package id="System.Threading.dll" version="1.0.2856.0" targetFramework="net35-client" />
</packages>`

重要的是要注意这是 运行 在 Windows Jenkins Slave 上。我确实在上面安装了 Visual Studio,但现在它是 运行 作为许可试用版。如果可能的话,我真的不想拥有它的许可证。另外,我从命令行(在 Jenkins 模板中)运行ning nuget。现在我让它直接指向 nuget 网站来获取它的包,但最终它会在公司的联系上。

这是 Jenkins 中报告的错误:

 Call to NuGet
 Unknown option: '-encodedCommand'
 Finished calling Nuget

我相信 encodedCommand 语句是 powershell 的东西。

这里是来自 powershell 的 运行ning 的详细输出,详细程度如下:

C:\bin\nuget.exe install F:\Jenkins\workspace\<some company>\
<username>\e2CsharpSeleniumGit\ParallelSelenium\packages.config -Verbosity detailed
Feeds used:
  C:\Users\<username>\AppData\Local\NuGet\Cache
  https://api.nuget.org/v3/index.json
  C:\Program Files (x86)\Microsoft SDKs\NuGetPackages\

Restoring NuGet package Selenium.RC.2.53.0.
Restoring NuGet package Selenium.Support.2.53.0.
Restoring NuGet package NUnitTestAdapter.2.0.0.
Restoring NuGet package NUnit.2.6.4.
Restoring NuGet package System.Threading.dll.1.0.2856.
Restoring NuGet package Selenium.WebDriver.2.53.0.
Restoring NuGet package Selenium.WebDriverBackedSelenium.2.53.0.
System.AggregateException: One or more errors occurred. ---> System.FormatException: Input string was not in a correct f
ormat.
   at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.Format(IFormatProvider provider, String format, Object[] args)
   at NuGet.CommandLine.ConsoleProjectContext.Log(MessageLevel level, String message, Object[] args)
   at NuGet.PackageManagement.PackageRestoreManager.<RestorePackageAsync>d__39.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.PackageRestoreManager.<PackageRestoreRunnerAsync>d__37.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.PackageRestoreManager.<RestoreMissingPackagesAsync>d__35.MoveNext()
   --- End of inner exception stack trace ---
   at System.Threading.Tasks.Task.ThrowIfExceptional(Boolean includeTaskCanceledExceptions)
   at System.Threading.Tasks.Task.Wait(Int32 millisecondsTimeout, CancellationToken cancellationToken)
   at NuGet.CommandLine.Command.Execute()
   at NuGet.CommandLine.Program.MainCore(String workingDirectory, String[] args)
---> (Inner Exception #0) System.FormatException: Input string was not in a correct format.
   at System.Text.StringBuilder.AppendFormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.FormatHelper(IFormatProvider provider, String format, ParamsArray args)
   at System.String.Format(IFormatProvider provider, String format, Object[] args)
   at NuGet.CommandLine.ConsoleProjectContext.Log(MessageLevel level, String message, Object[] args)
   at NuGet.PackageManagement.PackageRestoreManager.<RestorePackageAsync>d__39.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.PackageRestoreManager.<PackageRestoreRunnerAsync>d__37.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at NuGet.PackageManagement.PackageRestoreManager.<RestoreMissingPackagesAsync>d__35.MoveNext()<---

非常感谢任何帮助!!

您可以尝试使用以下步骤在 Windows Server 2012 上使用 powershell 恢复您的包,根据我这边的 packages.config 文件,我 运行 成功了。

首先,创建一个 scrip 文件 (.ps1),用于在您的解决方案根目录中找到 packages.config 文件,然后将它们读取到 运行 nuget restore 命令以恢复包裹。

#This will be the root folder of all your solutions - we will search all children of this folder
$SOLUTIONROOT = "C:\Projects\"
#This is where your NuGet.exe is located
$NUGETLOCATION = "C:\Projects\NuGet\NuGet.exe"

Function RestoreAllPackages ($BaseDirectory)
    {
        Write-Host "Starting Package Restore - This may take a few minutes ..."
        $PACKAGECONFIGS = Get-ChildItem -Recurse -Force $BaseDirectory -ErrorAction SilentlyContinue | 
            Where-Object { ($_.PSIsContainer -eq $false) -and  ( $_.Name -eq "packages.config")}
        ForEach($PACKAGECONFIG in $PACKAGECONFIGS)
            {
                Write-Host $PACKAGECONFIG.FullName
                $NugetRestore = $NUGETLOCATION + " install " + " '" + $PACKAGECONFIG.FullName + "' -OutputDirectory '" + $PACKAGECONFIG.Directory.parent.FullName + "\packages'"
                Write-Host $NugetRestore
                Invoke-Expression $NugetRestore
            }
    }

RestoreAllPackages $SOLUTIONROOT
Write-Host "Press any key to continue ..."
$x = $host.UI.RawUI.ReadKey("NoEcho,IncludeKeyDown")

其次,右击这个文件选择运行和Powershell执行脚本。然后它将开始根据找到的 packages.config 文件安装软件包。

此错误可能来自 Nuget 无法访问存储库。这发生在我身上,因为我没有通过命令行使用 nuget 配置设置设置我的代理设置: https://docs.nuget.org/consume/Command-Line-Reference#config-command