我有一个库,我使用FSharp.Data'sJsonProvider从 JSON 文件构造类型。但是,当我在控制台应用程序中引用该项目并尝试访问生成的类型时,它不会编译,而是在控制台应用程序的目录中查找示例文件,产生如下错误
Cannot read sample JSON from 'sample.json': Could not find file 'C:\Some\Where\TheSolution\ConsoleApp\sample.json
Run Code Online (Sandbox Code Playgroud)
我真的必须将示例文件复制到每个引用项目中,还是必须将其添加为 DLL 才能使其正常工作,还是我做错了什么?
当您在库中使用 F# 数据类型提供程序并引用该库时,编译器将尝试访问示例 - 这是因为每次使用类型时都会删除并重新创建类型。(它们也是延迟生成的,因此它们是在使用时动态生成的,因此这是唯一的选择。)
如果您可以使用库复制文件,这可能是最好的选择,但我们尝试解决此问题 - 您可以将示例嵌入为资源并告诉类型提供程序首先查找资源。请参阅F# 数据文档中的在库中使用 JSON 提供程序:
type WB = JsonProvider<"../data/WorldBank.json",
EmbeddedResource="MyLib, worldbank.json">
Run Code Online (Sandbox Code Playgroud)
例如,它在F# Data Toolbox库中使用。可惜的是,要让它正常工作有点麻烦。