通过#加载引用程序集时,如何获得F#类型提供程序的正确解析文件夹?

通过#加载引用程序集时,如何获得F#类型提供程序的正确解析文件夹?,f#,type-providers,f#-scripting,paket,F#,Type Providers,F# Scripting,Paket,我正在编写一个类型提供程序,它允许用户向它提供一个配置文件。我使用TP的内部配置对象来标识ResolutionFolder,我使用它来获取配置文件的完全合格路径。太好了 但是,在使用脚本时,我使用Paket自动生成的加载脚本来加载依赖项。文件路径如下所示:- .paket |--.load | |-- net452 | |-- main.group.fsx |--src |-- myscript.fsx |-- co

我正在编写一个类型提供程序,它允许用户向它提供一个配置文件。我使用TP的内部配置对象来标识
ResolutionFolder
,我使用它来获取配置文件的完全合格路径。太好了

但是,在使用脚本时,我使用Paket自动生成的加载脚本来加载依赖项。文件路径如下所示:-

.paket
   |--.load
   |     |-- net452
   |           |-- main.group.fsx
   |--src
       |-- myscript.fsx
       |-- config.json
myscript.fsx
包含我的脚本代码
config.json
包含我将在脚本中创建的类型提供程序实例的配置

myscript.fsx
中,我调用
#load.\.paket\.load\net452\main.group.fsx“
加载所有依赖项(包括我的TP本身),这样做很好

但是

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

type MyTPInstance = MyTp<myConfig = "config.json">
换句话说,因为我引用了另一个文件夹中的脚本的TP程序集,所以FSI将该文件夹用作解析文件夹,而不是正在运行的脚本的文件夹。我可以证明这是个问题,因为如果我直接将
main.group.fsx
的内容复制到
myscript.fsx
中(当然是修复到我的包的路径),一切都可以正常工作


我怎样才能解决这个问题?其他人是如何解决这个问题的?

我想我从来没有在我参与的任何类型提供程序中成功地使相对路径解析正确工作过。如果其他人能弄明白这一点,那将是惊人的

迟早,我会开始使用
[]
\uuuu源代码\uuuu目录\uuuuu
为类型提供程序提供一个绝对路径:

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

它仍然很难看,但至少工作可靠。

哈利路亚。那很有效-谢谢。顺便问一下,
const
关键字上的文档在哪里?是F#4.1吗?没有在任何地方看到它的文档,甚至没有为我编译。文档仍将其显示为保留关键字,以备将来使用。使用F#Data,以下内容适用于我使用F#Interactive version 14.0.23413.0时使用的
type B=CsvProvider
[<Literal>]
let MyConfig = __SOURCE_DIRECTORY__ + "/config.json"
type MyTPInstance = MyTp<myConfig = MyConfig>
type MyTPInstance = MyTp<myConfig = const(__SOURCE_DIRECTORY__ + "/config.json")>