在提供的类型上获取编译错误

Run*_* FS 5 f# type-providers f#-3.0

我正在开发一个读取XSD文件的TypeProvider,并为XSD中定义的每种类型提供一种类型.但是我在下面的代码中遇到了问题

type schema = XmlProviders.Schema<"file.xsd">
type Bazzer = {
    Sum : XmlProviders.bar
}
Run Code Online (Sandbox Code Playgroud)

在最后一行,我得到一个编译错误,说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
Run Code Online (Sandbox Code Playgroud)

我知道创建了一个XmlProviders.bar类型,因为如果我向defineType添加一行,provider.AddMember t那么我会收到错误说

类型提供程序'XmlProviders.SampleTypeProvider'报告错误:'XmlProviders.bar'的容器类型已设置为'XmlProviders.Schema'

哪里XmlProviders.SchemaProvidedTypeDefinition鉴定provider

我有点迷失为什么编译器抱怨类型不存在,而如果我明确添加它我得到错误,它已经存在

Run*_* FS 4

找到了答案,所以对于那些以同样的情况结束的人

线

let t = ProvidedTypeDefinition(thisAssembly,
                                   ns,
                                   name,
                                   baseType = Some typeof<obj>)
Run Code Online (Sandbox Code Playgroud)

定义嵌套类型的地方应该没有程序集和命名空间

let t = ProvidedTypeDefinition(name,baseType = Some typeof<obj>)
Run Code Online (Sandbox Code Playgroud)