我在一台计算机上检查了一个项目,检查了另一台计算机,发现NuGet安装的二进制文件丢失了.我也可以检查它们来源控制,但看起来有一个更好的解决方案:
http://docs.nuget.org/docs/workflows/using-nuget-without-committing-packages
我按照这些说明,现在有.nuget
一个应该是的文件夹,在我的.csproj文件中有以下条目:
<RestorePackages>true</RestorePackages>
<Import Project="$(SolutionDir)\.nuget\nuget.targets" />
Run Code Online (Sandbox Code Playgroud)
然而,当我重建我的解决方案时,丢失的包不会被恢复.
我错过了什么?我该如何诊断这个问题?
Chr*_*sic 258
请注意,您可以通过在nuget包管理器控制台中运行以下命令来强制执行包还原
更新包 - 重新安装
强制重新安装解决方案中的所有内容.
Update-Package -Reinstall -ProjectName myProj
强制重新安装myProj项目中的所有内容.
注意:这是核选项.使用此命令时,您可能无法获得已安装的软件包的相同版本,这可能会导致问题.与解决方案级别相比,这不太可能发生在项目级别.
您可以使用-safe
命令行参数选项将升级限制为具有相同主要和次要版本组件的较新版本.此选项稍后添加,并解决了评论中提到的一些问题.
Update-Package -Reinstall -Safe
Dav*_*New 24
对于偶然发现这篇文章的其他人,请阅读本文.
NuGet 2.7+向我们介绍了自动包恢复.对于大多数应用程序来说,这被认为是一种更好的方法,因为它不会篡改MSBuild进程.少说头疼.
一些链接可以帮助您入门:
Ale*_*ion 20
您是否在具有缺少的软件包/二进制文件的项目中启用了软件包还原模式?有一个已知问题,需要在启用还原模式时正确安装软件包:
http://nuget.codeplex.com/workitem/1879
原始链接已经死亡; 这可能是一个替代品:https://github.com/NuGet/Home/issues/1968
Moh*_*yan 19
您必须选择以下一种方式:
在所有解决方案的项目中按名称重新安装软件包:
Update-Package –reinstall <packageName>
Run Code Online (Sandbox Code Playgroud)
按名称重新安装软件包,忽略它在所有解决方案项目中的依赖关系:
Update-Package –reinstall <packageName> -ignoreDependencies
Run Code Online (Sandbox Code Playgroud)
在项目中按名称重新安装包:
Update-Package –reinstall <packageName> <projectName>
Run Code Online (Sandbox Code Playgroud)
重新安装特定项目中的所有包:
Update-Package -reinstall -ProjectName <projectName>
Run Code Online (Sandbox Code Playgroud)
在解决方案中重新安装所有软件包:
Update-Package -reinstall
Run Code Online (Sandbox Code Playgroud)
小智 12
我在两个场景中遇到了这个问题.
首先,当我尝试使用msbuild.exe从命令行构建我的解决方案时.其次,当我尝试使用TFS和CI在我的构建服务器上构建sln和包含项目时.
我得到错误声称缺少引用.检查我的本地构建目录和TFS服务器时,我发现未创建/ packages文件夹,并且不会复制nuget软件包.遵循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>
Run Code Online (Sandbox Code Playgroud)
to :(注意,没有变量周围的引号)
<RestoreCommand>$(NuGetCommand) install $(PackagesConfig) -source $(PackageSources) -o $(PackagesDir)</RestoreCommand>
Run Code Online (Sandbox Code Playgroud)
我明白,如果我的目录中有空格,这将失败,但我的目录中没有空格,所以这个解决方法让我的构建成功完成...暂时.
我会说在构建中启用诊断级别日志记录将有助于显示msbuild正在执行的命令.这就是我暂时黑客攻击目标文件的原因.
如果其他方法无效,请尝试:
为我工作,很容易尝试。
If none of the other answers work for you then try the following which was the only thing that worked for me:
Find your .csproj
file and edit it in a text editor.
Find the <Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">
tag in your .csproj
file and delete the whole block.
Re-install all packages in the solution:
Update-Package -reinstall
Run Code Online (Sandbox Code Playgroud)
After this your nuget packages should be restored, i think this might be a fringe case that only occurs when you move your project to a different location.