经过大量的实验工作和互联网或 F# 书籍中令人惊讶的少量信息后,我发现了以下内容:
// Cannot use a relative path
//#I @"bin\Debug"
// Have to use a absolute path
#I @"C:\Development\FSharpNameSpaceTest\SomeCSharpLib\bin\Debug"
// But I can reference a Csharp dll lib
#r "SomeCSharpLib.dll"
// I cannot add a reference to an external F# library dll
// #I @"C:\Development\FSharpNameSpaceTest\NameSpace\bin\Debug"
// #r "NameSpace.dll"
// If I directly load the external fs file, it works"
#load @"C:\Development\FSharpNameSpaceTest\NameSpace\SomeNameSpace.fs"
#load "Library1.fs"
// Namespaces in both the local and the external fs files can only be openend if every single file is loaded instead of referencing the dll.
// Referencing a C# dll is no problem
open FSharpNameSpaceTest
open SomeCSharpLib
open NameSpace
我不知道这是否是最佳方法,但它有效。我要做的是,我将为每个项目创建一个 fsx 文件,该文件在该项目中加载各个 fs 文件,然后我将在引用该项目的 fsx 文件中加载该 fsx 文件。
我仍然觉得这一切都非常令人困惑和违反直觉。但这可能是我对 F# 内部结构的有限了解
编辑:正确而完整的答案是,我没有实现默认构造函数。不过,如果您不想这样做,上述方法是一种替代方法。感谢马克西格里特。