为什么我不能让 Suave 在 VS 2017 上工作?

Why can't I get Suave to work on VS 2017?

我在 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 中。出现错误信息"The value or constructor 'startWebServer' is not defined",但光标悬停在左侧黄色区域时没有提示。 (也许是因为我使用的是社区版?)

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

open Suave

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

此时我在 Suave 下看到一个红色波浪线和错误消息 "The namespace or module 'Suave' is not defined."

如果我在解决方案资源管理器中右键单击 Suave,然后选择 "Send to Interactive",那么我可以在 F# Interactive 中打开 Suave

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

有什么问题吗?

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

如有必要,您应该可以克隆 my repo。您会注意到我的 fsprojects 文件没有引用 FSharp.Core 的明确版本,因此目标版本和实际版本之间没有混淆。它实际上是 FSharp.Core 4.1 顺便说一句。

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

  1. 将项目设置为 .NET 4.6.2(或您喜欢的任何版本)
  2. 目标 F# 4.1
  3. Nuget 温文尔雅

添加这一点 nuget 将下载 FSharp.Core 并在您的项目中替换它。不太好看。

  1. 从您的参考文献中删除 FSharp.Core
  2. 从 Nuget 添加 FSharp.Core 4.1

一切顺利:

我还建议您为 VS2017 安装 Paket。然后,您可以从 VS 中的“工具”菜单访问它。这样你就可以将 Suave 和 FSharp.core 添加到你的 paket.references 和依赖文件中,从菜单中设置 redirects: on、运行 Paket 安装,而忘记所有这些版本不匹配的事情。如果您使用大量 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