Bir XSD dosyası okuyan ve XSD'de tanımlanan her tür için bir tür sağlayan bir TypeProvider üzerinde çalışıyorum. Ben son satırında aşağıdaki koduSağlanan türde bir derleme hatası alma türü
type schema = XmlProviders.Schema<"file.xsd">
type Bazzer = {
Sum : XmlProviders.bar
}
bir sorun var ancak ben XmlProviders.bar var olmadığını söyleyen bir derleme hatası alıyorum. Bir XmlProviders.bar tip I
söyleyerek bir hata alıyorum sonraThe type provider 'XmlProviders.SampleTypeProvider' reported an error: container type for 'XmlProviders.bar' was already set to 'XmlProviders.Schema'
provider.AddMember t
defineType bir satır daha eklemek çünkü eğer oluşturulduğunu biliyoruz
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
şöyle Ben türlerini tanımlamak nasıl uygulanması vardır XmlProviders.Schema
provider
tarafından tanımlanan ProvidedTypeDefinition
olduğunu
Ben derleyici tipi olmadığını şikayet neden biraz kayıp olursam ederken açıkça ben orada aynı durumda sona olanlara böylece, cevap Bulunan
zaten GitHub Workitem farkında gibi görünüyor, ama XmlPro da çabaları [Destek XSD diğer insanların haberdar etmek olarak bu yüzden buraya ekleyeceğim vider] (https://github.com/fsharp/FSharp.Data/issues/57) ve sadece konuyla ilgili bağlantıyı kesişirseniz (çok istekliysem bunu kaldırmaktan çekinmeyin) [Yazılıma nasıl yaklaşılır Karma şemayı uygulayan F # tipi sağlayıcı?] (Http://stackoverflow.com/questions/20024418/how-to-approach-writing-an-f-type-provider-that-enforces-complex-schema). Bakalım burada yardım edeyim (yani, bununla çaylak). – Veksi