NuGet不在构建时恢复包

时间:2013-12-24 12:53:14

标签: visual-studio msbuild nuget visual-studio-2013 nuget-package

我刚刚在新机器上创建了一个工作区,从TFS获得了最新的项目,启用了NuGet Restore,我得到了以下(略读)输出:

1>------ Rebuild All started: Project: Caching, Configuration: Debug Any CPU ------
1>  Restoring NuGet packages...
1>  To prevent NuGet from downloading packages during build, open the Visual Studio Options dialog, click on the Package Manager node and uncheck 'Allow NuGet to download missing packages'.
1>  All packages listed in packages.config are already installed.
1>  Caching Framework -> C:\MyProjLocation\Caching\bin\Debug\Caching.dll
2>------ Rebuild All started: Project: Library, Configuration: Debug Any CPU ------
2>C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets(1635,5): warning MSB3245: Could not resolve this reference. Could not locate the assembly "LumenWorks.Framework.IO". Check to make sure the assembly exists on disk. If this reference is required by your code, you may get compilation errors.
2>C:\MyProjLocation\Library\SomeClass.cs(2,7,2,17): error CS0246: The type or namespace name 'LumenWorks' could not be found (are you missing a using directive or an assembly reference?)

========== Rebuild All: 1 succeeded, 1 failed, 0 skipped ==========

没有任何NuGet包被恢复(有超过10个 - 为了便于阅读,我从上面的输出中删除了它们。)

看起来NuGet甚至没有尝试恢复第二个项目(库)的包。

我已经尝试在Library.csproj文件as mentioned here中的CSharp目标导入下移动NuGet目标导入,但它仍然无效:

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<Import Project="$(SolutionDir)\.nuget\NuGet.targets" Condition="Exists('$(SolutionDir)\.nuget\NuGet.targets')" />

我在Visual Studio 2013上运行最新版本的NuGet(2.7.41101.371)。

编辑packages.config存在且NuGet包管理器已使用正确的软件包勾选了库项目。

7 个答案:

答案 0 :(得分:17)

在NuGet恢复丢失的软件包之前,我必须进入Source Control并删除packages文件夹中的所有文件(repositories.config除外)。这个想法是你使用包恢复而不是检查你的包到源代码控制。如果它在源代码管理中看到包,则不会下载它们。

答案 1 :(得分:11)

您是否也从磁盘中删除了NuGet.targets文件?

如果存在NuGet.tagets文件,Visual Studio / NuGet.exe将尝试执行MSBuild包还原。

有关详细信息,请参阅this doc

答案 2 :(得分:6)

我不确定这背后的科学,但是在尝试构建一个刚刚下载的Visual Studio项目之后,它对我有用,并且在发生构建失败之后会收到几个MSB3245警告缺少参考文献:

  1. 在Visual Studio中,右键单击缺少NuGet引用的项目,然后选择&#34; Manage NuGet Packages ...&#34;
  2. 将打开“管理NuGet包”对话框。我还看到一条消息快速显示然后自动关闭,文本沿着&#34;恢复NuGet包...&#34;
  3. 关闭“管理NuGet包”对话框(不实际更改对话框上的任何内容),然后重试构建。
  4. 编辑:回到我的TimeSnapper自动截图历史记录中(与该工具没有任何关系 - 我只是一个粉丝),看起来在顶部还显示了一条消息管理NuGet包,以及&#34; Restore&#34;按钮:&#34;此解决方案中缺少某些NuGet包。单击以从在线包源中恢复。&#34;

    enter image description here

    虽然&#34;恢复&#34;显然我自动发生了,手动点击该按钮也可以解决丢失的包问题。

答案 3 :(得分:6)

我也有同样的问题,也在本地机器上。虽然程序包管理器控制台和nuget.exe restore MySolution.sln都报告已安装了所有内容,但在解决方案目录中找不到packages文件夹,并且没有解析对程序包的引用。

我检查了所有项目文件,他们希望将软件包放在..\packages文件夹中,该文件夹位于解决方案文件本身所在的文件夹中。

我的工作方式是运行:

nuget.exe restore MySolution.sln -PackagesDirectory packages

这迫使nuget.exe将所有包下载到指定的文件夹,并恢复了所有引用。

请记住,从NuGet 2.7开始,不支持目标文件,msbuild假设使用一些集成的方法来恢复软件包,但它经常失败。

事实上,对于我自己的工作,我更喜欢使用Paket,当你习惯它时,总是工作。它还支持目标文件和创建NuGet包的好方法。

答案 4 :(得分:3)

必须卸载nuget软件包并进行刷新安装才能使其正常运行。这可能会帮助你们中的一些人面对同样的问题

答案 5 :(得分:1)

我遇到了同样的问题。在我的情况下,是父目录中的val timestamp_df =file_name_df.withColumn("timestamp",reverse(split(reverse(col("filename")),"_").getItem(0))) 设置了NuGet.Config。因此<add key="repositorypath" value="C:\CxCache" />会将软件包复制到一个我不知道的文件夹中。参见NuGet Configuration Inheritance

删除父目录中的nuget restore解决了该问题。

答案 6 :(得分:0)

在Mac上;我将代码提交给git并删除了所有内容(主文件夹),然后再次下载了它。之后工作。