更改为发布构建配置时,NuGet引用无效

时间:2013-02-12 21:43:49

标签: .net visual-studio nuget

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

您是否曾经历过类似的问题而且您知道如何解决这个问题吗?

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

3 个答案:

答案 0 :(得分:7)

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

重点是,我正在改变解决方案的结构并移动了一些项目。这意味着,每个项目的.csproj文件中都会出现无效的相对路径。哪个好,只要你不改变我所做的结构深度。

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

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

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

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

答案 1 :(得分:2)

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

答案 2 :(得分:0)

晚会,但它可能会帮助某人。如果您将nuget repositoryPath(可能通过nuget.config)更改为其他路径,项目中期,则会发生此问题。

e.g。

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

如@Baron所述,重新安装将解决所有这些混乱。我还建议从工作树中删除所有bin / obj / packages,以确保没有任何问题。

相关问题