如何使 F# JSON 类型的提供程序示例可用于测试项目?

How to make an F# JSON type provider sample available for test project?

我正在使用 F# JSON 类型提供程序从参考 JSON 文档创建类型。参考文档 "ReferenceItem.json" 是 F# 库的一部分。此外,我还有一个测试库的单元测试项目。我正在努力使参考文档可用于测试项目而不复制它。

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

我注意到在 F# 项目中我可以将文件标记为 "DesignData" 或 "DesignDataWithDesignTimeCreatableTypes",但我不知道如何使用它们。

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

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

请参阅 "Using JSON provider in a library" 部分 of the documentation。这个想法是您可以将示例文档作为资源嵌入库中,并将资源名称指定为附加参数:

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

这样就可以在使用库的时候加载资源了(但是还是需要原编译方式下的文件名)。这仍然是实验性的,所以如果你不能让它工作,请在 GitHub 上提出一个问题!