更改为发布版本配置后,NuGet引用无效。

7
我在使用NuGet(最新版本)和VS2012时遇到了一个奇怪的问题。我有一个多项目解决方案,启用了NuGet软件包管理,并且只要我使用Debug | AnyCPU配置,它就可以编译并且应用程序能够正确运行。一旦我切换到Release | AnyCPU,似乎所有的NuGet程序集引用都不见了,应用程序显然无法编译。奇怪的是,对于所有正确的项目,我可以在NuGet管理器UI中看到所有的引用。
你是否曾经遇到过类似的问题,并知道如何修复它?
重建并没有帮助,NuGet引用是在设置Debug配置时设置的。
3个回答

8

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

问题在于,我正在改变解决方案的结构并移动一些项目。这意味着,每个项目的.csproj文件中都会有无效的相对路径。只要不改变结构的深度,这是可以的,但我已经改变了。

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

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

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

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


我曾经遇到过同样的问题,但是这是由于.csproj文件合并引起的。我不得不卸载/编辑项目并删除重复的引用,以便在重新加载解决方案中的项目文件后,NuGet可以再次管理它们。 - tmgirvin
我遇到了相同的问题。我认为调试仍然有效的原因是DLL文件仍在BIN目录中,因为它们可以被重复使用,而发布版本是我自从移动项目/打破相对路径后的第一个版本,就像您所描述的那样。 - JohnLBevan

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

1
晚来的帮手,但它可能会对某些人有所帮助。如果您在项目进行中更改nuget repositoryPath(可能通过nuget.config),则可能会出现此问题。
例如:
  • Nuget将最初将软件包提取到默认路径中
  • Nuget repositoryPath已更改。
  • 新软件包将被提取到此路径中,但现有路径不会被清除(msbuild clean也无济于事)。
  • 构建时,您的提示路径将指向初始repo路径,并且将构建,因为软件包仍然存在于该位置。
  • (更糟糕的是)现在添加的任何nuget软件包都将指向新的repo路径。
如@Baron所提到的那样,重新安装将解决所有这些混乱。我还建议从您的工作树中删除所有bin / obj / packages,以确保您没有任何垃圾。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接