在提供的类型上出现编译错误

2024-01-06

我正在开发一个 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

我有点不明白为什么编译器抱怨类型不存在,而如果我显式添加它,我会得到它已经存在的错误


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

the line

let t = ProvidedTypeDefinition(thisAssembly,
                                   ns,
                                   name,
                                   baseType = Some typeof<obj>)

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

let t = ProvidedTypeDefinition(name,baseType = Some typeof<obj>)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在提供的类型上出现编译错误 的相关文章

随机推荐