将相同包安装到解决方案中的多个 F# 项目时出现 NuGet 问题
NuGet issues when installing same package to multiple F# projects in solution
这是解决方案布局:
- FSharpNuGetTest (sln)
- FirstService(F# 3.1 控制台项目,.NET 4.5/4.5.2)
- SecondService(F# 3.1 控制台项目,.NET 4.5/4.5.2)
为了争论起见,假设我想从 NuGet 安装 TopShelf 到这两个服务。无论库如何,都会发生错误,someone else had very similar issue not that long ago,但似乎我实际上可以可靠地重现它。
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
糟糕...
我在
的时候(又)遇到了
- 正在尝试将 XUnit/NUnit 安装到解决方案中的多个 F# 测试项目。
- 最近,当尝试将 Akka.FSharp 安装到解决方案中的多个 F# 项目时。
有什么解决办法吗...?
我只在多个 F# 项目中遇到过这种情况 - C# 项目从未遇到过任何问题。
我的创可贴解决方案是将引用从一个 .fsproj
文件复制并粘贴到另一个文件。 Update-Package
甚至似乎在该操作后工作。
这并没有改变它是一个黑客的事实,而不是解决方案管理应该如何工作的事实,特别是当需要重新安装时 - 然后你必须复制并粘贴一个 .fsproj
中的所有 <Reference>
元素(一个实际上安装了所有东西的人),因为 NuGet 包安装在后续项目中死亡...
编辑
看来暴力破解可能在这里奏效 - 在 c.a 4 次尝试后,软件包安装到第二个服务应用程序 (?!)。
这毫无意义...
我只是希望我不必在 CI 服务器上这样做。
回答有点半途而废,但就到此为止吧。
正如我在编辑中指出的那样,暴力破解似乎有效。如果它第一次不起作用,只需发送垃圾邮件 Install-Package
就可以让它在第二次(或第三次或第四次...)尝试时起作用。
奇怪...
这是解决方案布局:
- FSharpNuGetTest (sln)
- FirstService(F# 3.1 控制台项目,.NET 4.5/4.5.2)
- SecondService(F# 3.1 控制台项目,.NET 4.5/4.5.2)
为了争论起见,假设我想从 NuGet 安装 TopShelf 到这两个服务。无论库如何,都会发生错误,someone else had very similar issue not that long ago,但似乎我实际上可以可靠地重现它。
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
糟糕...
我在
的时候(又)遇到了- 正在尝试将 XUnit/NUnit 安装到解决方案中的多个 F# 测试项目。
- 最近,当尝试将 Akka.FSharp 安装到解决方案中的多个 F# 项目时。
有什么解决办法吗...?
我只在多个 F# 项目中遇到过这种情况 - C# 项目从未遇到过任何问题。
我的创可贴解决方案是将引用从一个 .fsproj
文件复制并粘贴到另一个文件。 Update-Package
甚至似乎在该操作后工作。
这并没有改变它是一个黑客的事实,而不是解决方案管理应该如何工作的事实,特别是当需要重新安装时 - 然后你必须复制并粘贴一个 .fsproj
中的所有 <Reference>
元素(一个实际上安装了所有东西的人),因为 NuGet 包安装在后续项目中死亡...
编辑
看来暴力破解可能在这里奏效 - 在 c.a 4 次尝试后,软件包安装到第二个服务应用程序 (?!)。 这毫无意义...
我只是希望我不必在 CI 服务器上这样做。
回答有点半途而废,但就到此为止吧。
正如我在编辑中指出的那样,暴力破解似乎有效。如果它第一次不起作用,只需发送垃圾邮件 Install-Package
就可以让它在第二次(或第三次或第四次...)尝试时起作用。
奇怪...