首页 文章

NuGet包还原不起作用

提问于
浏览
144

我在一台计算机上检查了一个项目,检查了另一台计算机,发现NuGet安装的二进制文件丢失了 . 我也可以检查它们来源控制,但看起来有一个更好的解决方案:

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

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

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

然而,当我重建我的解决方案时,丢失的包不会被恢复 .

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

19 回答

  • 240

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

    Update-Package -Reinstall

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


    Update-Package -Reinstall -ProjectName myProj

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

    Note :这是核选择 . 使用此命令时,您可能无法获得已安装的软件包的相同版本,这可能会导致问题 . 与解决方案级别相比,这不太可能发生在项目级别 .

    您可以使用 -safe 命令行参数选项将升级限制为具有相同主要和次要版本组件的较新版本 . 此选项稍后添加,并解决了评论中提到的一些问题 .

    Update-Package -Reinstall -Safe

  • 3

    对于偶然发现这篇文章的其他人,请阅读本文 .

    NuGet 2.7向我们介绍了 Automatic Package Restore . 对于大多数应用程序来说,这被认为是一种更好的方法,因为它不会篡改MSBuild进程 . 少说头疼 .

    Some links to get you started:

  • 10

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

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


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

  • 1

    您必须选择以下一种方式:

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

    Update-Package –reinstall <packageName>
    

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

    Update-Package –reinstall <packageName> -ignoreDependencies
    

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

    Update-Package –reinstall <packageName> <projectName>
    

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

    Update-Package -reinstall -ProjectName <projectName>
    

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

    Update-Package -reinstall
    
  • 16

    我在两种情况下遇到了这个问题 .

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

    我得到错误声称缺少引用 . 检查我的本地构建目录和TFS服务器's I see that the /packages folder is not created, and the nuget packages are not copied over. Following the instructions listed in Alexandre'时,答案http://nuget.codeplex.com/workitem/1879对我来说也不起作用 .

    我已经通过VS2010启用了Restore Packages,我看到构建只能在VS2010中运行 . 再次,使用msbuild失败 . 我的解决方法可能完全无效,但对于我的环境,这使得一切工作从本地命令行构建,以及TFS中的CI构建 .

    我进入 . \ nuget并在.nuget \ NuGet.targets文件中更改了这一行:

    从:

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

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

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

    我知道如果我的目录中有空格,这将失败,但我的目录中没有空格,所以这个解决方法让我的构建成功完成...暂时 .

    我会说在您的构建中启用诊断级别日志记录将有助于显示msbuild正在执行的命令 . 这就是我暂时黑客攻击目标文件的原因 .

  • 0

    VS 2017

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

  • 1

    如果其他任何不起作用,请尝试:

    • 关闭项目 .

    • 删除解决方案文件夹中的包文件夹 .

    • 再次打开Project并再次恢复Nugget包 .

    为我工作,很容易尝试 .

  • 20

    对于可能遇到此问题的其他人,我能够通过关闭Visual Studio并重新打开项目来解决问题 . 加载项目时,在初始化阶段恢复了包 .

  • 0

    如果其他答案都不适合你,那么尝试下面这是唯一对我有用的东西:

    找到您的 .csproj 文件并在文本编辑器中进行编辑 .

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

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

    Update-Package -reinstall
    

    在此之后你的nuget包应该恢复,我认为这可能是一个边缘情况,只有当你将项目移动到另一个位置时才会发生 .

  • 0

    对我来说,我在.csproj中有一个空标签NuGetPackageImportStamp

    <NuGetPackageImportStamp>
        </NuGetPackageImportStamp>
    

    它理想情况下应包含一些有效的GUID .

    删除上面说的标签,然后“恢复Nugets”为我工作 .

  • 3

    有时会发生奇怪的事情并使用Visual Studio自动恢复不起作用 . 在这种情况下,您可以使用NuGet包管理器控制台 . 这是在 Tools -> NuGet Package Manager -> Package Manager Console 中在Visual Studio中打开的 . 控制台中的命令很简单 . 要在键入命令时获取上下文帮助,只需按下按钮,它将为您提供以're typing. So if a package isn't安装的字母开头的所有选项,例如log4net,键入以下命令:

    安装包log4net

    您可以执行更多操作,例如指定要安装的版本,更新软件包,卸载软件包等 .

    当Visual Studio像一个古怪的人时,我不得不使用控制台来帮助我 .

  • 1

    Automatic Package Restore will fail for any of the following reasons:

    • 您没有从解决方案的.nuget文件夹中删除NuGet.exe和NuGet.targets文件(可以在解决方案根文件夹中找到)

    • 您没有从工具>>选项>> Nuget包管理器>>常规设置启用自动包恢复 .

    • 您忘了手动将所有项目中的引用删除到Nuget.targets文件

    • 您需要重新启动Visual Studio(确保在重新启动之前从您的任务管理器中终止该进程) .

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

  • 2

    在我的系统上进行系统还原后,我将NuGet包破坏了,大约两天后备份 . (同时安装了NuGet包 . )要修复它,我必须转到用户配置文件中的.nuget \ packages文件夹,找到包并删除它们 . 只有这样,Visual Studio才能将新的包拉出来并正确添加它们作为参考 .

  • 0

    我发现从头开始创建一个新项目的最佳解决方法,然后使用代码导入所有源文件 . 我的项目并不复杂,所以我没有遇到任何问题 .

  • 4

    vs2015没有启用nuget恢复问题 . 我的解决方案

    • 添加文件夹.nuget,在Directory .nuget中添加文件NuGet.Config和NuGet.targets

    • 每个项目文件添加: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>
    
  • 23

    如果您所面临的错误是“无法连接到远程服务器”,那么除了上述注释中提供的检查之外,还可以进行此检查 .

    我看到有2个NUGET包源可以从中下载包(在Tools-> Nuget Package Manager-> Packager Manager Settings中) . 其中一个Package Source没有运行,Nuget只是试图从该源下载 .

    Things fell into place once I changed the package source to download from: https://www.nuget.org/api/v2/ EXPLICTLY in the settings

  • 12

    在我的情况下,中止的Nuget还原尝试已损坏解决方案中的一个 packages.config 文件 . 在检查我的git工作树之前,我没有发现这个 . 在还原文件中的更改后,Nuget还原正在再次运行 .

  • 1

    有一个使Nuget恢复工作的快捷方式,1 . 确保在VS Tools选项菜单中正确连接互联网或Nuget网址2.在解决方案中查看.nuget或nuget文件夹,否则 - 从任何文件复制到获取nuget.exe

    • DELETE包文件夹(如果存在)

    • 打开包管理器控制台执行此命令

    • 粘贴nuget.exe的完整路径RESTORE .sln文件的完整路径!

    • 使用Install-pacakge命令,如果构建没有通过任何缺少的引用 . 希望它有助于(HIH)

  • 0

    在我的情况下,没有其他解决方案有效:

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

    • 备份一切 . 请注意您需要重新安装的依赖项列表,退出VisualStudio

    • 在文本编辑器中打开所有.proj文件并删除所有文件 PackageReference

    • 在每个项目中,删除 binobj 文件夹

    • 删除在解决方案中找到的所有"packages"文件夹 .

    • 打开解决方案,进入 Tools > Nuget Package Manager > Package Manager SettingsClear all Nuget caches . 检查控制台,因为它可能无法删除某些项目 - 复制文件夹路径并退出visual studio .

    • 从该文件夹中删除任何内容重新打开解决方案并从头开始重新安装nuget软件包 .

    如果仍然无效,请重复但也在Windows资源管理器中搜索您的驱动器 nuget 并删除任何缓存外观 .

相关问题