F# Interactive、NuGet 和外部库
F# Interactive, NuGet, and External libraries
我正尝试在 OS X El Capitan 上 运行 Xamarin Studio 5.9.8 中 suave(网络服务器)的演示代码。
module ServerTest =
open Suave // always open suave
open Suave.Http.Successful // for OK-result
open Suave.Web // for config
startWebServer defaultConfig (OK "Hello World!")
当我实际构建代码时,它按预期工作。但是,当我尝试使用 ctrl + return 以交互方式 运行 连接它时,我收到错误 The namespace or module 'Suave' is not defined
。我环顾四周,看起来 like it's possible to use libraries interactively with Visual Studio。有没有办法让它在 OS X 上运行?
构建代码时,有关引用的 DLL 的信息不包含在代码本身中,而是包含在其他地方(项目文件)。
但是当你在 FSI 中执行代码时,FSI 看到的只是代码。它没有可从中获取引用的项目文件。
但由于 FSI 仍然需要偶尔加载引用的 DLL(否则,它不会很有用),它提供了一种在代码中对它们进行编码的方法。这种方式被描述为 in the page you linked - 具体来说,#r
指令。
不幸的是,当您使用编译器构建代码时,不支持这些指令。编译器在看到它们时会产生错误。
因此您似乎有一个选择:要么使用 FSI 执行代码,要么使用编译器构建它。两者不能使用相同的代码。
幸运的是,有一些技巧可以解决这个问题。
首先,您可以利用一个名为 INTERACTIVE
的特殊条件编译变量并将 #r
指令放在 #if
中,这样只有FSI 会看到它,但编译器不会:
#if INTERACTIVE
#r "./path/to/my.dll"
#endif
其次,您可以创建一个单独的脚本文件来加载引用,然后加载您的实际代码文件:
#r "./path/to/my.dll"
#load "./my_code.fs"
然后用FSI执行这个脚本文件。
在这两种情况下,路径都是相对于脚本文件的。
这意味着您收到的 "not found" 错误可能是由于 Suave DLL 的路径不正确造成的。我严重怀疑 DLL 是否与代码文件位于同一目录中。而且它没有扩展名。
我正尝试在 OS X El Capitan 上 运行 Xamarin Studio 5.9.8 中 suave(网络服务器)的演示代码。
module ServerTest =
open Suave // always open suave
open Suave.Http.Successful // for OK-result
open Suave.Web // for config
startWebServer defaultConfig (OK "Hello World!")
当我实际构建代码时,它按预期工作。但是,当我尝试使用 ctrl + return 以交互方式 运行 连接它时,我收到错误 The namespace or module 'Suave' is not defined
。我环顾四周,看起来 like it's possible to use libraries interactively with Visual Studio。有没有办法让它在 OS X 上运行?
构建代码时,有关引用的 DLL 的信息不包含在代码本身中,而是包含在其他地方(项目文件)。 但是当你在 FSI 中执行代码时,FSI 看到的只是代码。它没有可从中获取引用的项目文件。
但由于 FSI 仍然需要偶尔加载引用的 DLL(否则,它不会很有用),它提供了一种在代码中对它们进行编码的方法。这种方式被描述为 in the page you linked - 具体来说,#r
指令。
不幸的是,当您使用编译器构建代码时,不支持这些指令。编译器在看到它们时会产生错误。
因此您似乎有一个选择:要么使用 FSI 执行代码,要么使用编译器构建它。两者不能使用相同的代码。
幸运的是,有一些技巧可以解决这个问题。
首先,您可以利用一个名为 INTERACTIVE
的特殊条件编译变量并将 #r
指令放在 #if
中,这样只有FSI 会看到它,但编译器不会:
#if INTERACTIVE
#r "./path/to/my.dll"
#endif
其次,您可以创建一个单独的脚本文件来加载引用,然后加载您的实际代码文件:
#r "./path/to/my.dll"
#load "./my_code.fs"
然后用FSI执行这个脚本文件。
在这两种情况下,路径都是相对于脚本文件的。
这意味着您收到的 "not found" 错误可能是由于 Suave DLL 的路径不正确造成的。我严重怀疑 DLL 是否与代码文件位于同一目录中。而且它没有扩展名。