4

我正在编写一个类型提供程序,它允许用户向它提供配置文件。我使用 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 捕获并显示:-

The type provider reported an error: Unable to locate config file
"C:\Users\Isaac\Source\Repos\myRepo\.paket\load\net452\config.json"

换句话说 - 因为我从另一个文件夹中的脚本引用了我的 TP 程序集,所以是 FSI 用作解析文件夹的文件夹 - 而不是正在运行的脚本的文件夹。我可以证明这是问题所在,因为如果我直接将内容复制main.group.fsx到其中myscript.fsx并且(当然是修复我的包的路径),一切正常。

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

4

1 回答 1

9

我想我从来没有设法使相对路径解析在我参与的任何类型提供程序中正常工作。如果其他人能弄清楚这一点,那将是惊人的。

迟早我只是开始使用[<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")>

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

于 2017-05-06T00:15:30.613 回答