20

我在 Visual Studio 2012 中有一个涉及多个项目的 C# 解决方案的特别困难的重构会话。我需要将一堆代码提取到他们自己的程序集中,以便可以在多个项目之间共享代码,所有这些都在同一个解决方案中。但是,无论我尝试什么,我都会收到引用新共享项目的项目的警告,即“所有引用 {shared project name} 的项目都必须安装 nuget 包 Microsoft.Bcl.Build”。

我仔细检查了依赖项目和共享项目,详细验证它们都使用相同的版本和完全相同的 DLL 用于 Microsoft.Bcl 版本 1.0.1.19 和 Microsoft.Bcl.Async 版本 1.0。 16包:

  • 系统运行时
  • System.Threading.Tasks

  • Microsoft.Threading.Task

  • Microsoft.Threading.Tasks.Extensions
  • Microsoft.Threading.Tasks.Extensions.Phone

DLL 路径都已解析且相同。XAP 文件确实构建了,但我仍然收到警告,告诉我 Microsoft.Bcl.Build 在依赖项目中没有被引用,尽管我可以看到它是。

如果我尝试卸载然后使用 NuGet 为所涉及的每个项目重新安装这两个包,我会得到空路径的引用和所涉及的 5 个 DLL 引用的警告图标。出于某种原因,NuGet 添加了引用但找不到 DLL。此外,如果我这样做,我会发现自己经常遇到问题,即在尝试添加引用时遇到“无法添加引用”错误的项目。然后我关闭并重新打开解决方案,这导致“项目加载失败”错误。所以我必须手动编辑项目文件,删除错误的包导入语句,然后重新加载项目。

我该如何解决这个问题,将来避免这种头痛的一般技术是什么?让 NuGet 管理丢失的包根本没有帮助。

4

2 回答 2

16

万一其他人遇到这个并且@Swell的解决方案让你去“wtf”:

我最近浏览了一个较旧的 MVC 项目并对其进行了更新(更新了 razor、asp、http 等 nuget 包)。该项目独立于自身,构建良好,但是当我去发布它时,它因 OP 的错误而失败。

事实证明这是因为我没有更新*.Tests与之关联的项目(应该已经想到,尽管不确定为什么 Tests项目密切相关)。所以,要修复:

  1. 右键单击解决方案并管理 nuget 包。
  2. 浏览在 web 项目中更新的所有包,并将它们也应用到其他项目(每个“更新”将显示一个包含适用项目的树,我很好,只需单击即可)。
  3. 重建。

你现在应该很好,它不应该对你吠叫。希望对其他人有所帮助。

于 2013-06-21T20:35:15.423 回答
6

我刚刚遇到了同样的问题,这里打开了一个错误:http: //nuget.codeplex.com/workitem/3268

我所做的是以下,我将包 Microsoft.Bcl.Build 添加到解决方案级别

在我的开发环境中,如果您没有加载包,只需右键单击解决方案并选择管理 nuget 包,您会看到一个带有恢复按钮的黄色条,只需单击它就可以了。

在编译项目之前的构建脚本中,我运行以下命令:

.\myproject\.nuget\NuGet.exe install .\myproject\.nuget\packages.config -OutputDirectory .\myproject\packages

这将恢复解决方案级别的包,你会没事的。

根据问题报告,这应该在今年夏天结束时在 2.7 版中修复

于 2013-05-30T13:42:00.967 回答