NuGet 包还原失效

我在一台计算机上签入了一个项目,在另一台计算机上签出,发现 NuGet 安装的二进制文件不见了。我也可以把它们送到源代码控制系统,但看起来有更好的解决方案:

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

我按照这些说明,现在有一个 .nuget文件夹中的一个应该,有以下条目在我的。Csproj 文件:

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

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

我错过了什么? 我该如何诊断这个问题?

241821 次浏览

您是否在包含丢失的包/二进制文件的项目中启用了包恢复模式?在启用还原模式时,有一个已知的问题需要正确安装包:

Http://nuget.codeplex.com/workitem/1879


原始链接已死; 这可能是一个替代品: https://github.com/NuGet/Home/issues/1968

我在两种情况下遇到过这个问题。

首先,当我尝试使用 msbuild.exe 从命令行构建解决方案时。 其次,当我尝试使用 TFS 和 CI 在构建服务器上构建 sln 和包含项目时。

我得到错误声称参考文献丢失。在检查本地构建目录和 TFS 服务器的时候,我发现没有创建/package 文件夹,也没有复制 nuget 包。按照亚历山大的回答中列出的指示 http://nuget.codeplex.com/workitem/1879也不适合我。

我已经通过 VS2010启用了还原包,并且我看到构建只能在 VS2010中工作。同样,使用 msbuild 将会失败。我的解决方案可能是完全无效的,但是对于我的环境来说,这可以通过本地命令行构建以及 TFS 中的 CI 构建来实现。

我进入.nuget 并在.nuget NuGet.target 文件中修改了这一行:

来自:

<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>

To: (注意,变量周围没有引号)

<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>

我明白,如果我的目录中有空间,这将失败,但我没有在我的目录中的空间,所以这个工作区让我的构建成功完成... 暂时。

我要说的是,在构建中打开诊断级别的日志记录将有助于显示 msbuild 正在执行哪些命令。所以我才暂时黑进了目标文件。

注意,您可以通过在 nuget 包管理器控制台中运行以下命令来强制执行包恢复

更新-软件包-重新安装

强制重新安装解决方案中的所有内容。


Update-Package-Reinstall-ProjectName myProj

强制重新安装 myProj 项目中的所有内容。

注意 : 这是核选项。使用此命令时,您可能得不到所安装的软件包的相同版本,这可能会导致问题。与解决方案级别相比,这种情况不太可能在项目级别发生。

您可以使用 -safe命令行参数选项来约束对具有相同主版本和次版本组件的较新版本的升级。这个选项是后来添加的,它解决了评论中提到的一些问题。

更新-软件包-重新安装-安全

对于其他可能遇到这个问题的人,我可以通过关闭 VisualStudio 并重新打开项目来解决这个问题。在加载项目时,将在初始化阶段还原包。

对于那些偶然发现这篇文章的人,请阅读这篇文章。

NuGet2.7 + 向我们介绍了 < em > 自动包装恢复 。对于大多数应用程序来说,这被认为是一种更好的方法,因为它不会篡改 MSBuild 过程。没那么头疼了。

以下是一些帮助你入门的链接:

有时候会发生一些奇怪的事情,使用 VisualStudio 自动恢复不起作用。在这种情况下,您可以使用 NuGet 包管理器控制台。在 VisualStudio 中从 工具-> NuGet Package Manager-> Package Manager Console打开的。控制台中的命令很简单。要在输入命令时获得上下文帮助,只需按下按钮,它就会提供所有选项,从你正在输入的字母开始。因此,如果没有安装软件包,例如 log4net,输入以下命令:

安装-软件包 log4net

您可以做更多的事情,比如指定要安装的版本、更新软件包、卸载软件包等等。

当 Visual Studio 表现得像个怪人时,我不得不使用控制台来帮助我。

你必须选择以下其中一种方式:

在所有解决方案的项目中按其名称重新安装包:

Update-Package –reinstall <packageName>

根据软件包的名称重新安装软件包,并忽略它在所有解决方案项目中的依赖项:

Update-Package –reinstall <packageName> -ignoreDependencies

按照包的名称在项目中重新安装包:

Update-Package –reinstall <packageName> <projectName>

重新安装特定项目中的所有包:

Update-Package -reinstall -ProjectName <projectName>

重新安装解决方案中的所有软件包:

Update-Package -reinstall

自动包还原将由于以下任何原因而失败:

  1. 您没有从解决方案的。Nuget 文件夹(可以在解决方案根文件夹中找到)
  2. 您没有从工具 > 选项 > > Nuget Package Manager > > 常规设置启用自动包恢复。
  3. 您忘记手动删除所有项目中对 Nuget.target 文件的引用
  4. 您需要重新启动 VisualStudio (确保在重新启动之前从任务管理器中关闭该进程)。

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

Vs2015没有启用 nuget 恢复问题。 我的解决办法是:

  1. 在 Directory.NuGet 中添加文件 NuGet.Config 和 NuGet.target

  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>

如果您面临的错误是“无法连接到远程服务器”,因为是我的,那么它将有利于您有这个检查以及除了检查提供了上述注释。

我发现有2个 NUGET 包源可以从中下载包(在 Tools-> NUGET Package Manager-> Packager Manager Settings 中)。其中一个软件包源代码不能正常工作,而 Nuget 只是试图从那个源代码下载。

一旦我改变了软件包的来源下载到位: https://www.nuget.org/api/v2/显然在设置

在我的系统上进行了系统还原,并备份了大约两天之后,NuGet 软件包就被打破了。(与此同时,NuGet 软件包已经安装完毕。)为了解决这个问题,我不得不去。在我的用户配置文件中的 nuget 包文件夹,找到包,然后删除它们。只有这样,VisualStudio 才会全新地下拉这些包,并正确地将它们添加为引用。

在我的案例中,一次中止的 Nuget 恢复尝试损坏了解决方案中的一个 packages.config文件。在检查我的 git 工作树之前,我并没有发现这一点。恢复文件中的更改之后,Nuget 恢复再次工作。

有一个让 Nuget 恢复工作的捷径。

  1. 请确保互联网连接或 Nuget 网址是适当的 VS 工具选项菜单

  2. 查看解决方案中的. nuget 或者 nuget 文件夹,else-copy from any 获取 nuget.exe

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

  4. 打开包管理器控制台,执行以下命令

  • 粘贴 nuget.exe 的完整路径 RESTORE. sln 文件的完整路径!
  1. 如果构建没有通过任何丢失的引用,请使用 Install-package 命令。

我发现从头开始创建一个新项目的最佳解决方案是, 然后导入所有源代码文件。 我的项目不是那么复杂,所以我从那里没有问题。

VS 2017

工具 > NuGet 软件包管理器 > 软件包管理器设置 > 常规 点击“清除所有 NuGet 缓存”

如果还有什么办法不管用,试试:

  1. 结束工程。
  2. 删除解决方案文件夹中的包文件夹。
  3. 再次打开 Project 并恢复 Nugget 软件包。

对我很有效,而且很容易尝试。

如果其他的答案都不适合你,那么试试下面这个唯一适合我的答案:

找到 .csproj文件并在文本编辑器中编辑它。

.csproj文件中找到 <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">标记并删除整个代码块。

重新安装解决方案中的所有软件包:

Update-Package -reinstall

在这之后,你的核桃包应该恢复,我认为这可能是一个边缘情况下,只发生当你把你的项目到不同的位置。

在我的情况下,其他的解决办法都不起作用:

AspNetCore 依赖项已经安装/卸载并正在缓存。AspNetCore.All’将拒绝正确更新/重新安装/删除。不管我怎么做,它都会使用缓存的依赖项(它不兼容) ,因为它们是更高的版本。

  1. 请注意需要重新安装的依赖项列表,退出 VisualStudio
  2. 在文本编辑器中打开所有.proj 文件并删除所有 PackageReference
  3. 在每个项目中,删除 binobj文件夹
  4. 删除在解决方案中找到的任何“包”文件夹。
  5. 打开解决方案,进入 < code > Tools > Nuget Package Manager > Package Manager 设置 和 Clear all Nuget caches。请检查控制台,因为它可能 无法删除一些项目-复制文件夹路径并退出可视化 工作室。
  6. 从该文件夹中删除任何内容。重新打开解决方案并启动 再次从头开始安装 Nuget 软件包。

如果这仍然不起作用,重复,但也搜索你的驱动器在文件资源管理器 nuget和删除任何缓存寻找。

对我来说,我有一个空标签 NuGetPackageImport Stamp in. csproj

<NuGetPackageImportStamp>
</NuGetPackageImportStamp>

理想情况下,它应该包含一些有效的 GUID。

移除这个标签,然后“还原金块”对我来说很有效。

在 VS2017中,右键单击 Solution = > Open CommandLine = > Developer Command Line。

一旦打开,输入(然后按回车键)

dotnet restore

这将恢复任何/所有的包,并且您将得到一个很好的控制台输出..。

我最近也遇到了这个问题,通常的“网络恢复”和“更新-包-重新安装”都没有帮助。

我看了看。并发现这些包的值不一致。有些指向 <solutiondir>\packages,有些指向 <projectdir>\packages

我让它们都指向同一个地方(我相信那是指向 <projectdir>\packages) ,然后我就能够恢复 NuGet 包了。

我不确定。Csproj 文件最终指向两个不同的位置。也许是从 VisualStudio2017(或更早)开始,然后转移到 VisualStudio2019?或者不同程序员使用的不同设置?我真的不知道。

我遇到的同样的问题,但是解决我的问题是去 Nuget Package Manager (右键单击 prj > select Manage Nugget Packages)卸载并重新安装有问题的软件包。

但是有一些软件包与其他软件包有依赖关系,所以我所做的就是先卸载这些依赖关系,然后再卸载我想要卸载并重新安装的 nuget 软件包。

您可以查看当您试图卸载这个 nuget 并访问 Output 窗口时,这个 nuget 是否有依赖关系,将会有一行说明这个 nuget 由于依赖关系而卸载失败,并且这些依赖关系也在这里列出。

我知道这是一个老线程,但它是第一个搜索结果今天(在2022年)“核心包恢复取消”。这是我在 VS 中尝试在我的新工作中重新构建解决方案时得到的信息。

我做这份新工作已经有几个星期了,到目前为止,工作进展顺利。

我的解决方案使用的包源是 xxxxPackages,其中 xxxx 是我雇主的名称。所以包源不是我通常使用的 nuget.org。 有时,VS 中会出现一条信息:

“ TF30063: 你无权进入 xxxxdev.visualstudio.com”

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

我在这里尝试了许多建议。然后,与一位同事聊天时,我发现我的 VS 登录已经过时了。在 VisualStudio 中,我点击右上角的图标,选择了“帐户设置”。有一个叹号提示我必须使用我的 xxxx 电子邮件地址刷新我工作账户的 visualstudio.com。

我一做完这件事,问题就消失了。 我希望这样可以省去别人今天早上的麻烦。