在解决方案中为多个F#项目安装相同的包时出现NuGet问题

3
这是解决方案的布局:
  • FSharpNuGetTest(sln)
    • FirstService(F# 3.1控制台项目,.NET 4.5 / 4.5.2)
    • SecondService(F# 3.1控制台项目,.NET 4.5 / 4.5.2)
举个例子,假设我想将TopShelf从NuGet安装到这两个服务中。无论库是什么,错误都会发生,不久前有人遇到了非常相似的问题,但似乎我确实可以可靠地重现它。
NuGet包管理器版本:2.8.60318.734
在打开VS2013.4社区版中的NuGet包管理器控制台后:
PM> Install-Package Topshelf -ProjectName FirstService
Installing 'Topshelf 3.1.4'.
(... snip - license stuff ...)
Successfully installed 'Topshelf 3.1.4'.
Adding 'Topshelf 3.1.4' to FirstService.
Successfully added 'Topshelf 3.1.4' to FirstService.

完美。现在让我们尝试使用另一个服务做同样的事情:
PM> Install-Package Topshelf -ProjectName SecondService
'Topshelf 3.1.4' already installed.
Adding 'Topshelf 3.1.4' to SecondService.
No exact match found for removing reference 'Topshelf'. Trying case-insensitive search...
Failed to find match for removing reference 'Topshelf'.
Install-Package : Failed to add reference to 'Topshelf'.
At line:1 char:16
+ Install-Package <<<<  Topshelf
    + CategoryInfo          : NotSpecified: (:) [Install-Package], InvalidOperationException
    + FullyQualifiedErrorId : NuGetCmdletUnhandledException,NuGet.PowerShell.Commands.InstallPackageCommand

哎呀...

我再次遇到了这个问题,原因是:

  1. 尝试将XUnit/NUnit安装到解决方案中的多个F#测试项目中。
  2. 最近在尝试将Akka.FSharp安装到解决方案中的多个F#项目中时。

有什么办法可以解决吗...?

这只发生在多个F#项目中 - 从来没有在C#项目中出现过任何问题。

我的临时解决方法是从一个.fsproj文件复制和粘贴引用。即使在此操作之后,Update-Package也似乎可以正常工作。 但这并不能改变这是一个hack的事实,而不是解决方案管理应该工作的方式,特别是当需要重新安装时 - 然后您必须再次从一个.fsproj(实际上获取所有内容的那个)复制并粘贴所有<Reference>元素到其他所有位置,因为NuGet包安装会在后续项目上失败...

编辑

看起来这里可能需要一些蛮力 - 经过约4次尝试,软件包已安装到第二个服务应用程序中(?!)。 这毫无意义...

我只希望我不必在CI服务器上这样做。


你考虑过使用Paket吗?我不能确定这个特定问题,但是Paket可以解决许多其他NuGet的问题。 - Fyodor Soikin
@FyodorSoikin 目前还没有。我只是粗略地看了一下,但它看起来很有前途 - 但我必须将其纳入 CI 构建过程 - 特别是 TeamCity。在这种情况下,与 NuGet 的紧密集成似乎是一个巨大的优势。我需要再研究一下。你说它“修复了许多其他 NuGet 问题”,那么主要的“修复”是什么? - Patryk Ćwiek
脑海中立刻浮现出两个例子:项目之间的软件包版本冲突和多平台目标。 - Fyodor Soikin
就我个人而言,我刚刚尝试了使用Visual Studio Premium 2013和NuGet 2.8.50926.663,但是我无法重现这个问题。如预期的那样,TopShelf被正确地安装到了两个项目中。这可能是您的环境出了问题。 - Mark Seemann
@MarkSeemann 奇怪的是,这在我两台不同的机器上发生了(在工作中使用VS2013 Pro和在我的私人电脑上使用上述设置),我完全不知道为什么... 可能是环境的问题,但我不知道该从哪里开始 :) - Patryk Ćwiek
@MarkSeemann 好的,看起来如果我一遍又一遍地运行 Install-Package,最终它会成功(?!)这真的很令人困惑,但没关系... - Patryk Ćwiek
1个回答

1
这有点像是个半答案,但我还是说一下吧。
正如我在编辑中所提到的,暴力破解似乎可行。如果第一次不起作用,只需不断地使用Install-Package就可以在第二次(或第三次、第四次……)尝试中使它起作用。
很奇怪……

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