【问题标题】:Why can't I get Suave to work on VS 2017?为什么我不能让 Suave 在 VS 2017 上工作?
【发布时间】:2017-04-18 13:30:30
【问题描述】:

我在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'”但当光标悬停在左侧黄色区域时没有任何建议。 (可能是因为我使用的是社区版?)

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

open Suave

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

此时我在 Suave 下看到一个红色波浪线,并显示错误消息“未定义命名空间或模块 'Suave'。”

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

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

有什么想法吗?

【问题讨论】:

  • 您能否将您的.fsproj 文件发布到 Gist 或 pastebin,然后从您的问题中链接它?可能是引用在某种程度上不正确。另一件事是 installing the nightly builds of the Visual F# Tools:“强烈建议您每晚安装最新版本。 已经修复了许多错误、性能改进和新功能,使整体体验比VS 2017 版本中提供的内容。” (强调原文)
  • 乍一看,我看不出有什么明显的问题。如果您安装 Visual F# 工具的夜间版本会发生什么?这能解决吗?我知道与最终 Visual Studio 版本一起发布的 Visual F# 工具版本有一些错误,这些错误在夜间构建中很快得到修复,但我不知道细节。所以这是我的下一个建议。如果这不起作用,请尝试安装 VS Code 和 Ionide,并查看 Ionide 是否在 Visual Studio 无法处理的地方处理它。所有这些都将为我们提供更多数据点,以帮助我们找出问题的解决方案。
  • 如果您没有获得自动完成功能,则说明您的 Visual F# Tools 安装有问题。我不使用 Visual Studio 进行 F# 开发,因为我的大部分开发工作都是在 Linux 上完成的,所以我无法确切告诉你要寻找什么——但听起来你的问题主要是由“有问题您的 Visual F# 工具安装”。所以也许扩展菜单(在 VS 中的任何位置)是开始的地方。
  • 顺便说一句,我不确定 Suave 需要或期望什么 F# Core 版本,但您引用的是 F#4.0:&lt;HintPath&gt;..\packages\FSharp.Core.4.0.0.1\lib\net40\FSharp.Core.dll&lt;/HintPath&gt;,但是您的目标是 F# 4.1:@987654333 @.
  • 你当然应该更新它。 :) 你能否参考我在SO post 中关于安装 VF# 工具的夜间版本的回答。关于您的具体 Suave 问题,请参见下文。如果您正在使用它,请添加 Paket

标签: visual-studio f# suave


【解决方案1】:

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

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

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

  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

【讨论】:

  • 我设法让它工作。首先,我安装了Paket 并将您提供的代码粘贴到paket.dependenciespaket.references 上。那没有用。然后我在解决方案资源管理器中右键单击项目名称,然后单击属性,我注意到 .NET Framework 的版本是 4.5.2。我将其更改为版本 4.6.2,Suave 下方 open Suave 中的红色波浪线消失了。我注意到我无法更改 Target F# 运行时,它显示为灰色并固定为 4.4.1.0(我认为它会是 4.0 或 4.1)。无论如何,非常感谢。
  • 将 .Net Framework 更改为 4.6.2 对我有用。
  • 将 .Net Framework 更改为 4.6.2 对我来说也足够了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 2013-11-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多