我正在编写类型提供商,该提供商允许用户向其提供配置文件。我使用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")>
它仍然很丑陋,但至少可以可靠地起作用。