我在https://channel9.msdn.com/Shows/Visual-Studio-Toolbox/Visual-F-Tools上观看了一个视频,其中创建了使用Suave的项目。我试图完全按照所执行的操作进行操作,但是今天刚刚更新的VS 2017安装的行为却大不相同。

首先,我完全按照视频中的说明安装了Suave,就像在视频中一样,它出现在我的引用中,在mscorlibSystem之间。

然后视频显示以下代码:

[<EntryPoint>]
let main argv =
    startWebServer
    0 // return an integer exit code


此时VS 2017建议在视频中显示“ Open Suave”,因为无法识别startWebServer。我在编辑器的文件Program.fs中复制了相同的代码。出现错误消息“未定义值或构造函数'startWebServer'”,但是当光标悬停在左侧黄色区域时,没有任何建议。 (也许是因为我正在使用Community Edition?)

无论如何,我在代码中添加了open Suave,所以我有:

open Suave

[<EntryPoint>]
let main argv =
    startWebServer
    0 // return an integer exit code


此时,我在Suave下得到一个红色的花样,错误消息“未定义名称空间或模块'Suave'。”

如果在解决方案资源管理器中右键单击Suave,然后选择“发送到交互式”,则可以在F#Interactive中打开Suave

我可以毫无问题地安装和使用Deedle等其他软件包。

关于什么是错的任何想法?

最佳答案

当然可以,但这可能只是一点工作:

visual-studio - 为什么我不能让Suave在VS 2017上工作?-LMLPHP

如有必要,您应该能够克隆my repo。您会注意到,我的fsprojects文件未引用FSharp.Core的显式版本,因此目标版本和实际版本之间没有混淆。实际上是FSharp.Core 4.1 btw。

如果您使用的是原始解决方案,那么我会先做一个新的解决方案。


将项目设置为.NET 4.6.2(或您喜欢的任何版本)
目标F#4.1
努吉特·苏瓦(Nuget Suave)


添加这一点,nuget将下载FSharp.Core并将其替换为您的项目。那样不是很好。


从您的引用中删除FSharp.Core
从Nuget中添加FSharp.Core 4.1


您很好:

visual-studio - 为什么我不能让Suave在VS 2017上工作?-LMLPHP

我还建议您为VS2017安装Paket。然后,您可以从VS中的“工具”菜单访问它。这样,您只需将Suave和FSharp.core添加到您的paket.references和依赖项文件中,设置redirects: on,从菜单中运行Paket install并忽略所有此版本不匹配的业务。如果您使用了很多fsx文件,这会特别好,因为paket将从路径中删除版本号。请查看GitHub解决方案中的paket.dependencies和paket.references文件:

解决方案根目录中的paket.dependencies:

framework: = net462
source https://www.nuget.org/api/v2
redirects: on

nuget Suave


项目文件夹中的paket.references:

Suave
FSharp.Core

09-06 04:52