F#类型提供程序在引用项目中查找示例文件,而不是被引用的项目。

5

我有一个库,其中使用FSharp.DataJsonProvider从JSON文件构造类型。然而,当我在控制台应用程序中引用此项目并尝试访问生成的类型时,它无法编译,但会在控制台应用程序的目录中查找示例文件,导致类似以下的错误:

Cannot read sample JSON from 'sample.json': Could not find file 'C:\Some\Where\TheSolution\ConsoleApp\sample.json

我真的需要将示例文件复制到每个引用项目中吗?还是我需要将其作为DLL添加才能使其正常工作?或者我做错了什么?


1
您将需要展示您的代码。 - Fyodor Soikin
由于这是公司代码,我不能公开,但是我已在相应的Github页面上打开了一个问题,并提供了复现步骤:https://github.com/fsharp/FSharp.Data/issues/1110。 - rabejens
1个回答

4
当您在库中使用F# Data类型提供程序并引用该库时,编译器会尝试访问示例。这是因为类型被擦除并且每次使用时都会重新创建。(它们也是惰性生成的,因此它们在使用时会即时生成,所以这是唯一的选择。)
如果您可以将文件与库一起复制,则可能是最佳选项,但我们试图解决此问题-您可以将示例作为资源嵌入,并告诉类型提供程序首先查找资源。请参阅F# Data文档中的在库中使用JSON提供程序
type WB = JsonProvider<"../data/WorldBank.json", 
  EmbeddedResource="MyLib, worldbank.json">

例如,在F# Data Toolbox库中会使用此功能。不幸的是,使其正常工作有点棘手。


啊,我错过了这个。不过我的具体示例非常简单,所以我不需要类型提供程序,但下次需要时我会记住它的。我还在 Github 页面上开了一个问题,它是#1110。我应该把它保持开放作为增强建议,还是应该关闭它? - rabejens
如果您的用例非常简单,您也可以使用内联JSON作为示例 - 如果JSON不太长,则可以正常工作。关于这个问题 - 我已经关闭了它,并从这里复制了答案。感谢您尝试通过报告来帮助解决它! - Tomas Petricek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接