2013-12-09 9 views
5

पर संकलन त्रुटि प्राप्त करना मैं एक टाइपप्रोवाइडर पर काम कर रहा हूं जो एक एक्सएसडी फ़ाइल पढ़ता है और एक्सएसडी में परिभाषित प्रत्येक प्रकार के लिए एक प्रकार प्रदान करता है। हालांकि मैं नीचे दिए गए कोडप्रदत्त प्रकार

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 प्रकार बनाई गई है क्योंकि अगर मैं तो provider.AddMember t DefineType को मैं

The type provider 'XmlProviders.SampleTypeProvider' reported an error: container type for 'XmlProviders.bar' was already set to 'XmlProviders.Schema'

कह कोई त्रुटि मिलती है एक अतिरिक्त पंक्ति जोड़ने कर रहे हैं

कहाँ XmlProviders.SchemaProvidedTypeDefinition द्वारा provider

पहचान है मैं थोड़ा क्यों संकलक शिकायत है कि प्रकार वहाँ नहीं है पर खो रहा हूँ, जबकि अगर मैं स्पष्ट रूप से इसे जोड़ने मैं त्रुटि है कि यह पहले से ही वहाँ

+0

ऐसा लगता है कि आप GitHub workitem पहले से ही के बारे में पता है, लेकिन मैं इसे यहाँ जोड़ देंगे तो के रूप में अन्य लोगों के बारे में पता XmlPro में अपने प्रयासों [सहायता XSD बनाने के लिए vider] (https://github.com/fsharp/FSharp.Data/issues/57) और बस अगर मैं अपने संबंधित प्रश्न को लिंक करता हूं (अगर मैं बहुत घुसपैठ कर रहा हूं तो इसे हटाने के लिए स्वतंत्र महसूस करें) [लेखन कैसे करें एफ # प्रकार प्रदाता जो जटिल स्कीमा को लागू करता है?] (Http://stackoverflow.com/questions/20024418/how-to-approach-writing-an-f-type-provider-that-enforces-complex-chechema)। चलो देखते हैं कि मैं यहां मदद कर रहा हूं (यानी, मैं इसके साथ रूकी हूं)। – Veksi

उत्तर

4

जवाब मिला, तो उन लोगों के लिए है कि एक ही स्थिति में खत्म हो रहा है मिल

लाइन

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

जहां नेस्टेड प्रकार के बिना किया जाना चाहिए परिभाषित किया गया है विधानसभा और नाम स्थान

let t = ProvidedTypeDefinition(name,baseType = Some typeof<obj>) 
संबंधित मुद्दे