F# 获取所提供类型的编译错误

F# 获取所提供类型的编译错误,f#,type-providers,f#-3.0,F#,Type Providers,F# 3.0,我正在使用一个TypeProvider,它读取XSD文件并为XSD中定义的每个类型提供一个类型。但是,我在下面的代码中有一个问题 type schema = XmlProviders.Schema<"file.xsd"> type Bazzer = { Sum : XmlProviders.bar } type schema=XmlProviders.schema Bazzer类型={ 总和:XmlProviders.bar } 在最后一行,我得到一个编译错误,说XmlP

我正在使用一个TypeProvider,它读取XSD文件并为XSD中定义的每个类型提供一个类型。但是,我在下面的代码中有一个问题

type schema = XmlProviders.Schema<"file.xsd">
type Bazzer = {
    Sum : XmlProviders.bar
}
type schema=XmlProviders.schema
Bazzer类型={
总和: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
let defineType(xType:XElement)=
让name=xType.Attribute(XName.Get“name”).Value
设t=提供的类型定义(此程序集,
ns,
名称
baseType=某种类型的
让ctor=ProviderdConstructor(参数=[],
InvokeCode=(有趣的参数->对象@@>)
t、 加法器
do provider.DefineStaticParameters(参数,名称参数->
让filename=args。[0]:?>字符串
让main=ProvidedTypeDefinition(此程序集,ns,
泰名,
baseType=某种类型的
//元素是元素的列表
元素|>List.map defineType |>ignore
主要的
我知道会创建一个XmlProviders.bar类型,因为如果我在defineType
provider.AddMember t
中添加一行额外的代码,那么我会得到一个错误,即

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

其中,
XmlProviders.Schema
是由
provider
标识的
ProvidedTypeDefinition


我有点搞不懂为什么编译器会抱怨类型不存在,而如果我显式地添加它,我会得到错误,它已经在那里了

找到了答案,因此对于那些以相同情况结束的编译器来说

线路

let t = ProvidedTypeDefinition(thisAssembly,
                                   ns,
                                   name,
                                   baseType = Some typeof<obj>)
let t=ProvidedTypeDefinition(此程序集,
ns,
名称
baseType=某种类型的
定义嵌套类型的位置不应包含程序集和命名空间

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

看起来您已经知道GitHub工作项了,但我将在这里添加它,以便让其他人知道您的努力,以防我交叉链接我的相关问题(如果我太冒昧,请随意删除)。让我们看看我在这里是否有帮助(也就是说,我在这方面比较新手)。