5
我正在使用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
然後我得到一個錯誤說
The type provider 'XmlProviders.SampleTypeProvider' reported an error: container type for 'XmlProviders.bar' was already set to 'XmlProviders.Schema'
凡XmlProviders.Schema
是provider
確定的ProvidedTypeDefinition
我有點失去了爲什麼編譯器抱怨的類型是不存在的,而如果我明確添加我拿到它已經存在
它看起來像你已經知道GitHub工作項目,但我會在這裏添加它,以使其他人知道你的努力[在XmlPro中支持XSD vider](https://github.com/fsharp/FSharp.Data/issues/57),以防萬一我交叉鏈接我的相關問題(如果我太闖入,隨時刪除)[如何寫作執行復雜模式的F#類型提供程序?](http://stackoverflow.com/questions/20024418/how-to-approach-writing-an-f-type-provider-that-enforces-complex-schema)。讓我們看看我在這裏是否有所幫助(也就是說,我是這樣的新秀)。 – Veksi