2013-12-09 8 views
5

私はXSDファイルを読み込み、XSDで定義された各型の型を提供するTypeProviderに取り組んでいます。私は最後の行に以下のコード指定された型でコンパイルエラーが発生する

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ある

私は、コンパイラは型が存在しないことを不平を言う理由で失われたビットだ場合はしばらくI明示的に私はそれが同じような状況で終わるものになるよう、答えを見つけることが

+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>) 
関連する問題