【问题标题】:Loading F# modules not in the current directory加载不在当前目录中的 F# 模块
【发布时间】:2018-02-17 08:06:42
【问题描述】:

我正在使用 Visual Studio 2017 编写一个简单的 F# 控制台应用程序,目标是 .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:打开声明中出现意外的字符串文字。预期标识符、“全局”或其他令牌。

似乎没有关于此的文档。

任何帮助将不胜感激。

【问题讨论】:

  • 您不能open 文件,只能在.fsproj 中的当前文件之前 列出的文件中声明的模块和命名空间。在 VS2017 中,您应该能够创建项目或将这些文件添加到现有项目,并重新排序文件。
  • 它在 F# 脚本上下文中的工作方式不同,您可以使用 #load 指令根据路径引入其他文件。

标签: f# visual-studio-2017 .net-core-2.0


【解决方案1】:

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

对于 VSCode,您可以在 Ionide 中使用 Command(或 Project Explorer):Ctrl+Shift+P:F#: Add Current File to ProjectF#: Move File Up/Down(F# Project Explorer 上也有一个右键菜单。

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

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

然后你可以打开这个模块并使用它。例如Add在这个模块中定义。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-02-09
    • 2012-12-11
    • 2017-01-02
    • 2012-12-27
    • 2011-06-09
    • 1970-01-01
    • 2011-08-29
    • 2012-04-05
    相关资源
    最近更新 更多