gpt4 book ai didi

f# - 无法在 Fsharp 脚本文件中打开命名空间

转载 作者:行者123 更新时间:2023-12-04 16:51:03 25 4
gpt4 key购买 nike

在 SomeLib.fs 文件中的单独 Fsharp 项目中时,将编译以下代码:

namespace SomeNameSpace
type SomeType =
member this.SomeMember = "Some member"

并且您想在脚本文件中引用和使用此类型,例如:
#I @"c:/pathToDll/"
#r "SomeLib.dll"

这是不可能的,尽管 dll 的路径是正确的并且我检查了所有内容。此外,当 SomeLib.fs 文件在同一个项目中并被 #load 引用时,您仍然无法打开命名空间。

我知道您可以将类型放入模块中,但我不能这样做,因为该类型已用作 Wcf 服务类型。

最佳答案

经过大量的实验工作和互联网上或 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

我不知道这是否是最佳方法,但它有效。我要做的是,我将为每个加载该项目中各个 fs 文件的项目创建一个 fsx 文件,然后我将在引用该项目的 fsx 文件中加载该 fsx 文件。

我仍然觉得这一切都非常令人困惑和违反直觉。但这可能是我对 F# 内部工作的有限了解

编辑:正确且完整的答案是,我没有实现默认构造函数。不过,如果您不想这样做,上述方法是一种替代方法。感谢马克·西格里特。

关于f# - 无法在 Fsharp 脚本文件中打开命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16927764/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com