7

我在使用 NuGet(最新)和 VS2012 时遇到了一个相当奇怪的问题。我有一个启用了 NuGet 包管理的多项目解决方案,只要我使用 Debug|AnyCPU 配置,它就会全部编译并且应用程序运行正确。一旦我切换到 Release|AnyCPU,似乎所有的 NuGet 程序集引用都消失了,应用程序显然无法编译。奇怪的是,我可以在 NuGet Manager UI 中看到所有正确项目的所有引用。

你有没有遇到过类似的问题,你知道如何解决吗?

重建没有帮助。在设置调试配置时设置了 NuGet 引用。

4

3 回答 3

7

再次,我正在回答我自己的问题......

关键是,我正在改变解决方案的结构并移动了一些项目。这意味着,您会在每个项目的 .csproj 文件中获得无效的相对路径。没关系,只要你不改变结构的深度,我就是这么做的。

由于未知原因,调试构建在无效路径的情况下运行良好(可能以其他方式收集程序集,因为我手动删除了 bin 和 obj 文件夹并清除了解决方案等)。但是对于发布版本,它尝试从(错误引用的)packages/ 目录中获取程序集。

NuGet 进程的任何部分都没有发现/报告此问题,并且在所有 UI 控制台中,甚至在 NuGet PowerShell 控制台本身中,一切似乎都还不错。

解决方案很明显。编辑受影响项目的 .csproj 文件(我实际上是通过过滤警告和发现,只有一些程序集受到影响并且那些来自主解决方案目录之外的程序集)并更改程序集引用的路径以正确的 NuGet 包文件夹。

旁注:这是 NuGet(可能还有 VS)引用处理的问题。它试图使用一些相对路径,而不是添加一些变量,如 ${SOLUTION_ROOT} 或 ${NUGET_ROOT} 或 ${PACKAGES_FOLDER}。如果它是通过变量替换完成的,则可以在多个解决方案中使用相同的项目,而不会破坏 NuGet 包配置。至少我还没有找到跨多个解决方案共享同一个项目文件夹的方法。

于 2013-02-12T22:45:16.313 回答
2

我能够通过卸载然后安装我的项目正在使用的 Nuget 包来解决这个问题。

于 2017-01-18T16:40:57.283 回答
0

聚会迟到了,但它可能对某人有所帮助。如果您将 nuget repositoryPath(可能通过 nuget.config)更改为不同的路径,中间项目,则可能会出现此问题。

例如

  • Nuget 最初会将您的包拉入默认路径
  • Nuget 存储库路径已更改。
  • 新包将被拉入此路径,但不会清除现有路径(msbuild clean 也无济于事)。
  • 当您构建时,您的提示路径将指向初始 repo 路径,并将构建,因为包仍然存在于该位置。
  • (更糟)现在添加的任何 nuget 包都将指向新的 repo 路径。

As mentioned by @Baron, reinstalling will resolve all this mess. I'd also recommend deleting all bin/obj/packages from your working tree, to ensure you don't have any crud.

于 2017-07-31T17:26:36.127 回答