NuGet 包恢复无法工作

191

我在一台电脑上检入了一个项目,在另一台电脑上检出时发现由NuGet安装的二进制文件丢失了。虽然我可以将它们一起检入源代码控制,但似乎有更好的解决方案:

http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages

我遵循了这些说明,现在有了一个.nuget文件夹,我的.csproj文件中有以下条目:

<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />

然而,当我重建我的解决方案时,丢失的包没有被恢复。

我错过了什么? 我怎样才能诊断这个问题?


你能在输出日志中看到nuget.exe被触发了吗? - Pranav
重要的是:您是否在输出日志中看到任何错误? - maartenba
25个回答

3

在VS2017中,右键单击解决方案 => 打开命令行 => 开发人员命令行。

打开后,输入以下内容(每次输入后按回车)

dotnet restore

这将恢复任何/所有软件包,并且您将获得一个漂亮的控制台输出,显示已完成的内容...


2

在我的情况下,其他解决方案都没有起作用:

AspNetCore依赖项已安装/卸载并被缓存。 'AspNetCore.All'将拒绝正确更新/重新安装/删除。而且无论我做什么,它都会使用缓存的依赖项(与其不兼容),因为它们是更高版本。

  1. 备份所有内容。注意需要重新安装的依赖项列表,退出VisualStudio
  2. 在文本编辑器中打开所有.proj文件并删除所有PackageReference
  3. 在每个项目中,删除binobj文件夹
  4. 删除解决方案中找到的任何“packages”文件夹。
  5. 打开解决方案,进入工具> Nuget软件包管理器>软件包管理器 设置清除所有Nuget缓存。检查控制台,因为它可能无法删除某些项目-复制文件夹路径并退出Visual Studio。
  6. 从该文件夹中删除任何东西,重新打开解决方案并开始从头安装nuget软件包。

如果仍然无法解决问题,请重复上述步骤,并在Windows资源管理器中搜索nuget,然后删除任何缓存的项目。


1
我发现最好的解决办法是从头开始创建一个新项目,然后将所有源代码文件导入。我的项目不是很复杂,所以从那里开始我没有遇到任何问题。

1
有时候会出现奇怪的情况,使用Visual Studio自动还原功能不起作用。这时你可以使用NuGet包管理器控制台。它在Visual Studio中打开,路径为 工具 -> NuGet包管理器 -> 包管理器控制台。控制台内的命令很简单。当输入命令时,按下Tab键可以获取上下文帮助,它会给出以你正在输入的字母开头的所有选项。因此,如果未安装某个包,例如log4net,请输入以下命令:

Install-Package log4net

你可以做很多其他操作,比如指定要安装的版本、更新包、卸载包等。

当Visual Studio表现得像个怪胎时,我就必须使用控制台来帮助我。


1
我在系统还原后,NuGet包出现了问题,这是我将系统备份约两天的结果。(期间已安装NuGet包。)为了解决问题,我必须进入用户配置文件中的.nuget\packages文件夹,找到这些包并将其删除。只有这样,Visual Studio才能重新下载这些包并正确地将它们添加为引用。

1

自动包恢复将会因为以下原因失败:

  1. 您没有从解决方案的.nuget文件夹中移除NuGet.exe和NuGet.targets文件(该文件夹位于您的解决方案根目录下)
  2. 您没有在"工具"菜单下的"选项"-"Nuget程序包管理器"-"常规设置"中启用自动包恢复。
  3. 您忘记了在所有项目中手动删除对Nuget.targets文件的引用
  4. 您需要重新启动Visual Studio(确保在再次启动之前,进程已被从任务管理器中终止)。

以下文章详细描述了如何处理第1-3点: https://docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore


1
关于您提到的第一点,您提供的链接与您的建议相矛盾: “如果您正在使用TFS
  1. 从解决方案的.nuget文件夹中删除NuGet.exe和NuGet.targets文件
  2. 保留NuGet.Config文件以继续绕过将软件包添加到源代码控制。”
- Andrew Dennison

1
我最近也遇到了这个问题。通常的“dotnet restore”和“Update-Package -reinstall”都没有帮助。
我查看了.csproj文件,并发现这些包的值是不一致的。有些指向\packages,有些则指向\packages。
我将它们全部指向同一个位置(我相信是\packages),然后我就能恢复NuGet包了。
我不确定为什么.csproj文件会指向两个不同的位置。可能是因为在Visual Studio 2017(或之前)开始,然后转移到Visual Studio 2019?或者由不同程序员使用不同的设置?我真的不知道。

0
vs2015 无法启用 NuGet 恢复的问题。 我的解决方案: 1. 在 .nuget 文件夹下添加 NuGet.Config 和 NuGet.targets 文件。 2. 在每个项目文件中添加 `build`。
  <RestorePackages>true</RestorePackages>

  <Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />
  <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
    <PropertyGroup>
      <ErrorText>This project references NuGet package(s) that are missing on this computer. Enable NuGet Package Restore to download them.  For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
    </PropertyGroup>
    <Error Condition="!Exists('$(SolutionDir)\.nuget\NuGet.targets')" Text="$([System.String]::Format('$(ErrorText)', '$(SolutionDir)\.nuget\NuGet.targets'))" />
  </Target>

这是旧的做法。请查看@davenewza的答案以及他提供的链接http://blog.davidebbo.com/2014/01/the-right-way-to-restore-nuget-packages.html。 - timB33

0

有一个捷径可以让Nuget还原工作。

  1. 确保在VS工具选项菜单中,互联网连接或Nuget urls正确

  2. 查看解决方案中的.nuget或nuget文件夹,否则-从任何一个复制以获取nuget.exe

  3. 如果存在,删除packages文件夹

  4. 打开包管理器控制台并执行此命令

  • 粘贴nuget.exe的完整路径RESTORE.sln文件的完整路径!
  1. 如果由于缺少引用而无法通过构建,则使用Install-pacakge命令。

0

我知道这是一个旧的线程,但它是今天(2022年)第一次搜索结果,用来搜索“nuget包还原已取消”。当我尝试在我的新工作中重新构建解决方案时,在VS中得到了这个消息。

我已经在新工作中工作了几周,之前构建一直有效。

我的解决方案使用的包源是xxxxPackages,其中xxxx是我的雇主的名称。因此,包源不是我通常使用的nuget.org。

偶尔,在VS中会出现以下消息:

"TF30063:您未被授权访问xxxxdev.visualstudio.com。"

尽管如此,我在浏览器中打开了xxxxdev.visualstudio.com,并能够在其中工作。

我尝试了很多建议。然后,与同事聊天时,事情变得清晰了,我的VS登录已过期。在Visual Studio中,我点击右上角的图标,选择“帐户设置”。有一个感叹号表示我必须使用我的xxxx电子邮件地址在visualstudio.com上刷新我的工作帐户的登录信息。

一旦我这样做了,问题就消失了。希望这可以节省其他人今天早晨的麻烦。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接