我正在开发一个 TypeProvider,它读取 XSD 文件并为 XSD 中定义的每种类型提供一个类型。但是我在下面的代码中遇到了问题
type schema = XmlProviders.Schema<"file.xsd">
type Bazzer = {
Sum : XmlProviders.bar
}
在最后一行,我收到编译错误,指出 XmlProviders.bar 不存在。
我如何定义类型的实现如下
let defineType (xType : XElement) =
let name = xType.Attribute(XName.Get "name").Value
let t = ProvidedTypeDefinition(thisAssembly,
ns,
name,
baseType = Some typeof<obj>)
let ctor = ProvidedConstructor(parameters = [ ],
InvokeCode= (fun args -> <@@ "" :> obj @@>))
t.AddMember ctor
do provider.DefineStaticParameters(parameters, fun tyName args ->
let filename = args.[0] :?> string
let main = ProvidedTypeDefinition(thisAssembly,ns,
tyName,
baseType = Some typeof<obj>)
//Elements is a list of XElement
elements |> List.map defineType |> ignore
main
我知道创建了 XmlProviders.bar 类型,因为如果我向 DefineType 添加额外的行provider.AddMember t
然后我收到一条错误消息
类型提供程序“XmlProviders.SampleTypeProvider”报告错误:“XmlProviders.bar”的容器类型已设置为“XmlProviders.Schema”
Where XmlProviders.Schema
is the ProvidedTypeDefinition
确定为provider
我有点不明白为什么编译器抱怨类型不存在,而如果我显式添加它,我会得到它已经存在的错误