NuGet 安装包不起作用。我怎样才能获得更详细的信息来帮助调试失败的原因?

NuGet install-package doesn't work. How can I get more verbose information to help debug why this is failing?

一位同事正在尝试将 nuget 包安装到一个简单的默认 c# Web 应用程序中。它几乎立即失败。

我可以在 Visual Studio 程序包管理器控制台中向 Install-Package <some nuget package> 提供一个参数来获取一些详细信息以帮助调试安装失败的原因吗?

错误信息:

An error occurred while retrieving package metadata for '' from source 'MyGet'.

信息: Visual Studio: V2015 NuGet 扩展:3.4.4.1321 Nuget包源:MyGet

在解决方案的根目录中找到的示例 NuGet.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <packageSources>
    <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
    <add key="MyGet" value="https://www.myget.org/F/<our package>/api/v2" /> 
  </packageSources>
</configuration>

对于我自己来说,我可以很好地安装软件包。事实上,我们在这个 MyGet public 存储库中有 5 个包,我刚刚安装了其中的 2 个包,就在那时.. 当我在创建这个 SO 问题之前(再次)测试它时。

有人有什么建议吗?

更新

如上所述,这是使用 PACKAGE MANAGER CONSOLE,而不是 CLI。

在 PMC 中使用 -verbosity detailed 会发生这种情况..

PM> install-package xunit -verbosity detailed
Install-Package : A parameter cannot be found that matches parameter name 'verbosity'.
At line:1 char:23
+ install-package xunit -verbosity detailed
+                       ~~~~~~~~~~
    + CategoryInfo          : InvalidArgument: (:) [Install-Package], ParameterBindingException
    + FullyQualifiedErrorId : NamedParameterNotFound,NuGet.PackageManagement.PowerShellCmdlets.InstallPackageCommand

您可以尝试将 -Verbose 参数添加到您的 PowerShell 命令中。

 install-package xunit -verbose

您也可以尝试查看 $error 对象,看看它是否有更多信息,例如异常调用堆栈。

$error.Exception.StackTrace

以上可能会或可能不会为您提供更多信息。

您可以在支持 PowerShell 的程序包管理器控制台中使用 -Verbose 开关来获取更多详细信息。

要排除 MyGet 的客户端连接问题,您可以尝试诊断客户端与 Feed 的连接吗?

https://www.myget.org/F/<feedIdentifier>/api/v2

尝试使用 Fiddler 从该用户计算机上使用 URL 格式的提要检索特定包:

https://www.myget.org/F/<feedIdentifier>/api/v2/package/<packageId>/<packageVersion>

如果它是私人供稿,您需要验证您的请求,例如使用预验证的 v2 端点:

https://www.myget.org/F/<feedId>/auth/<apiKey>/api/v2/package/<packageId>/<packageVersion>

如果缓存中的内容已损坏,清除 NuGet 客户端的 HTTP 缓存也可能有用。您可以使用 NuGet 命令行命令清除它:

nuget.exe locals http-cache -clear

如果包已在本地缓存中,则 NuGet 客户端将从本地缓存中解析它。可能是本地缓存中的包损坏了,此时可以使用下面的NuGet命令行命令:

nuget.exe locals all -clear

最后,nuget.config 层次结构可能也值得一看。最本地化的 nuget.config 将从更高层继承配置设置(例如机器范围的设置),其中之一是 <disabledPackageSources> 元素。为确保此问题未在此处出现,请将以下内容添加到您的最本地 nuget.config 并重试:

<disabledPackageSources>
  <clear />
</disabledPackageSources>

如果上述 none 可以帮助您解决问题,请随时使用带有 -verbosity detailed 的 nuget 命令行 (nuget.exe),因为它可能会提供更多详细信息,例如实际发出的 HTTP 请求。

此外,请确保您使用最新版本的 NuGet 客户端工具(可用 here

看起来你 运行 变成了 http://blog.myget.org/post/2016/02/21/Two-of-my-packages-are-treated-as-one-Help!.aspx。提要上有 0.7.0-dev 和 0.7-dev 版本的包,NuGet 将其视为同一版本。

解决方法是删除这两个包之一。