2013-12-09 29 views
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.Schemaprovider

確定的ProvidedTypeDefinition我有點失去了爲什麼編譯器抱怨的類型是不存在的,而如果我明確添加我拿到它已經存在

+0

它看起來像你已經知道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

回答

4

找到了答案,所以那些在相同的情況下結束錯誤

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

其中嵌套類型定義應該是不彙編和命名空間

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