如何为测试项目提供F#JSON类型提供程序示例?

时间:2015-03-12 09:36:00

标签: json f# type-providers f#-data

我正在使用F#JSON类型提供程序从引用JSON文档创建类型。参考文档“ReferenceItem.json”是F#库的一部分。另外我有一个测试库的单元测试项目。我正在努力为测试项目提供参考文档而不重复它。

无论我如何在Visual Studio中标记“ReferenceItem.json”(内容,无,复制到输出等),我的测试项目都无法编译,因为语句JsonProvider<“ReferenceItem.json”>期望“Reference.json”在编译时出现在项目源文件夹中。将它作为库项目中的链接项包含起来没有帮助:它不会在编译时复制到测试源文件夹。所以我需要在测试项目中制作文件的副本。

我注意到在F#项目中我可以将文件标记为“DesignData”或“DesignDataWithDesignTimeCreatableTypes”,但我无法弄清楚如何使用它们。

1 个答案:

答案 0 :(得分:3)

这是一个棘手的问题 - 当F#编译器引用库时,它将调用类型提供程序,因此类型提供程序需要能够访问该示例。

最简单的解决方案是始终复制样本json文件,使其位于应用程序启动的文件夹中。这显然是次优的,因此我们有另一种使用资源来处理它的方法。

请参阅“在库中使用JSON提供程序”部分of the documentation。我们的想法是您可以将示例文档作为资源嵌入库中,并将资源名称指定为附加参数:

type WB = JsonProvider<"../data/WorldBank.json", 
                       EmbeddedResource="MyLib, worldbank.json">

这将在使用库时加载资源(但它仍然需要原始编译模式下的文件名)。这仍然有点实验性,所以如果你不能让它工作,请在GitHub上打开一个问题!