我正在构建一个 Windows 8 应用程序,并且发现自己想要包含一个ISO-4217代码列表,我在 XML 中拥有最新的形式。
当然,所有国家/地区都有一些这样的代码。我认为 Type Provider 非常适合。但是,由于它们发出代码,我不能将它们与便携式库一起使用。
如何编译类型提供程序以使其不使用发射,以便使用我拥有的 XML?
我没有创建可从 Portable Libraries 使用的类型提供程序的经验,但您似乎假设类型提供程序在运行时发出代码。这实际上不是真的,因此在便携式设置中使用它们可能会更容易。
运行 F# 编译器时会执行类型提供程序。此时,它可能会生成一些类型,尽管实际上只有一种类型提供程序会这样做(有两种不同的类型 - 请参阅这个SO answer)。但是,当您编译使用 F# 类型提供程序的代码时,生成的程序集不会在运行时发出任何代码。
我认为Freebase 类型提供程序(在 FSharpX 中可用)是在便携式模式下工作的提供程序的一个示例。我怀疑技巧的一部分是将提供程序拆分为两个程序集——一个包含运行时需要的代码,另一个包含设计时组件(构建类型信息,尽管它们也不需要发出)。请参阅FreebaseRuntime.fsTypeProviderAssembly
中的属性。
FSharp.Data 中的 XmlProvider可与可移植库一起使用