NuGet包还原不起作用
我在一台计算机上检查了一个项目,在另一台计算机上检查了一下,发现NuGet安装的二进制文件丢失了。 我也可以检查它们来源控制,但它看起来像有一个更好的解决scheme:
http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
我遵循这些说明,现在有一个.nuget
文件夹应该是,我的.csproj文件中有以下条目:
<RestorePackages>true</RestorePackages> <Import Project="$(SolutionDir)\.nuget\nuget.targets" />
但是当我重build我的解决scheme时,丢失的包不会被恢复。
我错过了什么? 我怎样才能诊断这个问题?
请注意,您可以通过在nuget包pipe理器控制台中运行以下命令来强制执行包恢复
更新包 – 重新安装
强制重新安装解决scheme中的所有内容。
Update-Package -Reinstall -ProjectName myProj
强制重新安装myProj项目中的所有内容。
注 :这是核选项。 使用此命令时,可能无法获得与安装的软件包相同的版本,并且可能导致问题。 与解决scheme级别相比,这不太可能发生在项目级别。
您可以使用-safe
命令行参数选项来将升级限制为具有相同主版本和次版本组件的较新版本。 此选项稍后添加并解决了注释中提到的一些问题。
更新包 – 重新安装
对于其他谁绊倒这个职位,阅读此。
NuGet 2.7+向我们介绍了自动软件包还原 。 这被认为是对大多数应用程序更好的方法,因为它不会篡改MSBuild进程。 减less头痛。
一些链接,让你开始:
- 恢复NuGet包的正确方法
- 从基于MSBuild的NuGet包恢复迁移
- 迁移MSBuild集成解决scheme以使用自动软件包还原
您是否在缺less软件包/二进制文件的项目中启用软件包还原模式? 有一个已知问题需要在启用还原模式时正确安装软件包:
你必须select以下的一种方式:
在所有解决scheme的项目中按照名称重新安装软件包:
Update-Package –reinstall <packageName>
在所有解决scheme的项目中按名称重新安装软件包,并忽略它的依赖关系:
Update-Package –reinstall <packageName> -ignoreDependencies
在项目中重新安装软件包的名称:
Update-Package –reinstall <packageName> <projectName>
重新安装特定项目中的所有软件包:
Update-Package -reinstall -ProjectName <projectName>
在解决scheme中重新安装所有软件包:
Update-Package -reinstall
我在两种情况下遇到了这个问题。
首先,当我尝试使用msbuild.exe从命令行构build我的解决scheme时。 其次,当我尝试使用TFS和CI在我的构build服务器上构buildsln和包含的项目时。
我收到错误,声称缺less引用。 在检查我的本地编译目录和TFS服务器的时候,我发现/ packages文件夹没有被创build,并且nuget包没有被拷贝过来。 遵循亚历山大的回答http://nuget.codeplex.com/workitem/1879列出的说明也没有为我工作。;
我已经通过VS2010启用还原包,我看到只有在VS2010内工作。 再一次,使用msbuild失败。我的解决方法可能是完全无效的,但是对于我的环境,这一切都从本地命令行构build,以及从TFS中的CI构build。
我进入。\ nuget并在.nuget \ NuGet.targets文件中更改了这一行:
从:
<RestoreCommand>$(NuGetCommand) install "$(PackagesConfig)" -source "$(PackageSources)" -o "$(PackagesDir)"</RestoreCommand>
:(注意,没有引用variables)
<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>
我明白,如果我的目录中有空格,这将失败,但我没有在我的目录中的空间,所以这个解决方法让我的构build成功完成…暂时。
我会说在你的版本中打开诊断级日志会帮助显示msbuild正在执行什么命令。 这就是导致我暂时攻击目标文件的原因。
VS 2017
工具> NuGet软件包pipe理器>软件包pipe理器设置>常规点击“清除所有的NuGetcaching”
对于可能遇到此问题的其他人,我可以通过closuresVisual Studio并重新打开项目来解决问题。 项目加载时,包在初始化阶段被恢复。
有时会发生一些奇怪的事情,使用Visual Studio自动恢复不起作用。 在这种情况下,您可以使用NuGet程序包pipe理器控制台。 这是从工具 – > NuGet包pipe理器 – >软件包pipe理器控制台在Visual Studio中打开。 控制台内的命令很简单。 在input命令的同时获取上下文帮助,只需按下button,它将为您提供所有以您正在input的字母开头的选项。 因此,如果未安装软件包(例如log4net),请键入以下命令:
安装程序包log4net
您可以做更多事情,例如指定要安装的版本,更新软件包,卸载软件包等。
当Visual Studioperformance得像一个怪人时,我不得不使用控制台来帮助我。
由于以下任何原因,自动包恢复将失败:
- 您没有从解决scheme的.nuget文件夹中删除NuGet.exe和NuGet.targets文件(可以在解决scheme根文件夹中find该文件)
- 您没有从工具>>选项>> Nuget包pipe理器>>常规设置启用自动包恢复。
- 您忘记了将所有项目中的引用手动删除到Nuget.targets文件
- 您需要重新启动Visual Studio(确保在再次启动之前,该进程在任务pipe理器中被终止)。
下面的文章更详细地概述了如何去点1-3: https : //docs.nuget.org/consume/package-restore/migrating-to-automatic-package-restore
在我的系统上做了一个系统还原之后,我的NuGet软件包破了,大约两天就备份了。 (同时安装了NuGet软件包。)要解决这个问题,我必须到我的用户configuration文件中的.nuget \ packages文件夹中find软件包并删除它们。 只有这样,Visual Studio才能将这些软件包拉下来,并将其作为引用正确添加。
vs2015没有启用nuget恢复问题。 我的解决scheme
-
添加文件夹.nuget,在目录.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>
如果您遇到的错误是“无法连接到远程服务器”,那么除了上述注释中提供的检查之外,您还可以使用此检查。
我看到有2个NUGET包源可以下载包(在Tools-> Nuget Package Manager-> Packager Manager Settings中)。 其中一个Package Source没有运行,Nuget试图从这个源下载。
一旦我改变了软件包的源代码,就可以从https://www.nuget.org/api/v2/下载;
就我而言,中止的Nuget恢复尝试已经破坏了解决scheme中的一个packages.config
文件。 在检查我的git工作树之前,我没有发现这一点。 恢复文件中的更改后,Nuget恢复正在工作。
有一个快捷方式使Nuget恢复工作,1.确保互联网连接或Nuget的url在VS工具选项菜单中是正确的2.看在解决scheme中的.nuget或nuget文件夹,否则 – 复制任何得到nuget.exe
-
删除包文件夹,如果存在
-
打开包pipe理器控制台执行这个命令
- 粘贴完整path的nuget.exe RESTORE .sln文件的完整path!
- 使用Install-pacakge命令,如果构build没有通过任何缺less的引用。 希望它有助于(HIH)
我发现从头创build一个新的项目,然后导入所有的源代码文件的最佳解决方法。 我的项目不是那么复杂,所以我从那里没有问题。
如果还有什么不行,请尝试:
- closures项目。
- 删除解决scheme文件夹中的包文件夹。
- 再次打开项目并再次还原块包。
为我工作,这很容易尝试。