通过#load引用组件时,如何获取F#类型提供商的正确分辨率文件夹



我正在编写类型提供商,该提供商允许用户向其提供配置文件。我使用TP的内部配置对象来识别ResolutionFolder,我用它来获取配置文件的完全Qualfied路径。太好了。

但是,在使用脚本时,我使用Paket的自动生成的加载脚本来加载我的依赖项。文件路径看起来像这样: -

.paket
   |--.load
   |     |-- net452
   |           |-- main.group.fsx
   |--src
       |-- myscript.fsx
       |-- config.json

myscript.fsx包含我的脚本代码。config.json包含我将在脚本中创建的类型提供程序实例的配置。

myscript.fsx中,我将#load "...paket.loadnet452main.group.fsx"调用以加载所有依赖项(包括我的TP本身(。

但是

然后,当我尝试在脚本中进一步初始化类型提供商时: -

type MyTPInstance = MyTp<myConfig = "config.json">

我遇到了我的TP捕获并显示的错误: -

The type provider reported an error: Unable to locate config file
"C:UsersIsaacSourceReposmyRepo.paketloadnet452config.json"

换句话说 - 看来,因为我已经从另一个文件夹中引用了我的tp汇编, FSI用作分辨率文件夹的文件夹,而不是文件夹的文件夹。正在运行的脚本。我可以证明这是一个问题,因为如果我将main.group.fsx的内容直接复制到myscript.fsx中并(当然可以修复到我的包装的路径(,则一切都很好。

我该如何解决?其他人如何解决这个问题?

我认为我从未设法使相对路径分辨率在我参与的任何类型提供商中都正确起作用。如果其他人能弄清楚这一点,那将是惊人的。

迟早,我刚开始使用[<Literal>]__SOURCE_DIRECTORY__为类型提供商提供绝对路径:

[<Literal>]
let MyConfig = __SOURCE_DIRECTORY__ + "/config.json"
type MyTPInstance = MyTp<myConfig = MyConfig>

最近的const有点好:

type MyTPInstance = MyTp<myConfig = const(__SOURCE_DIRECTORY__ + "/config.json")>

它仍然很丑陋,但至少可以可靠地起作用。

相关内容

  • 没有找到相关文章

最新更新