加载不在当前目录中的 F# 模块

Loading F# modules not in the current directory

我正在编写一个简单的 F# 控制台应用程序,Visual Studio 2017 年目标 .NET Core 2.0。我想知道是否可以 open 当前目录中不存在的模块。

例如:

/root/foo.fs /root/SubDirectory/bar.fs

如何bar.fs打开Foo模块,反之亦然?

我已经试过了:

open Foo
open "../Foo"
open "C:/AbsolutePath/Foo"

对于最后两个,VS 抱怨:

FS0010 : Unexpected string literal in open declaration. Expected identifier, 'global' or other token.

似乎没有关于此的文档。

如有任何帮助,我们将不胜感激。

实际上你只能在预览版的 VS2017 中添加或重新排序文件,我相信(所以在 15.5.6 上还没有)。但是 TheQuickBrownFox 是正确的,包含你的模块的文件必须在 fsproj 文件中,顺序很重要。

对于 VSCode,您可以使用 Ionide 中的命令(或项目资源管理器):Ctrl+Shift+P:F#: Add Current File to Project 以及 F#: Move File Up/Down(右键单击菜单F# 项目资源管理器也是如此。

在 Visual Studio 2017 年,您可以 right-click 项目并选择 Edit .fsproj。 VS 将在保存时自动重新加载文件,因此无需像 VS2015 中那样卸载项目。它看起来像这样:

您可以看到 MyModule.fs 在项目的根目录中,带有 MyModule.fs 的行需要位于引用它的任何其他文件之上。您可以使用 Alt+Up/Down 箭头来移动行。

那你打开这个模块就可以使用了。例如Add定义在这个模块中。

我还添加了#load指令,这只是在你想在FSI中测试它时,编译器会忽略它。