2014-01-30 6 views
5

ich eine einfache Art-Provider erstellt haben, die ich einige vorab generierten Typen in einer Assembly verfügbar machen möchten, wie folgt:Intellisense funktioniert nicht für F # Typ Anbieter

[<TypeProvider>] 
type TestProvider() as this = 
    inherit TypeProviderForNamespaces() 
    let providedType = ProvidedTypeDefinition(Assembly.GetExecutingAssembly(), "Test", "TypeLib", None) 
    do let assembly = Assembly.LoadFrom @"C:\Some\Long\Path\TestTypes.dll" 
     // Get same problem with providedType.AddAssemblyTypesAsNestedTypesDelayed(), 
     // which is what I really want to use 
     providedType.AddMember(assembly.GetType("TestTypes.Circle")) 
     this.AddNamespace("Test", [providedType]) 

ich verbrauchen diesen Anbieter aus einem anderen Projekt als folgt:

// Circle member not showing up under TypeLib 
type Circle = Test.TypeLib.Circle 

let c = Circle() 
c.Radius <- 4. 
printfn "%f" c.Radius 
System.Console.ReadKey() |> ignore 

Es kompiliert, läuft und funktioniert wie erwartet, aber aus irgendeinem Grund die Circle zeigt nicht für Test.TypeLib in der Intellisense Liste nach oben. Auch wenn ich über Circle schweben sagt es A reference to type 'TestType.Circle' in assembly 'TestTypes' was found, but the type could not be found in that assembly.

Was mache ich falsch?

UPDATE: Wie durch ein Dmitry vorgeschlagen, ich die related question sehen und heruntergeladen die associated type provider, die etwas Ähnliches zu tun versucht, was mir tut. Leider verhält sich dieser Anbieter auf meinem Rechner genauso wie meiner, d. H. Er bietet Intellisense für Namespaces, jedoch keine Typen. Ich weiß also nicht, ob es etwas Spezifisches für meine Konfiguration oder was sein könnte.

+0

Haben Sie die Baugruppe im Reflektor oder Ihrem bevorzugten Demontagewerkzeug geöffnet? Könnte einen Blick wert sein. –

+0

Hier ist die Antwort auf die ähnliche Frage http://stackoverflow.com/questions/15078419/emitting-generated-types-in-f-type-providers/15079605#15079605 –

+0

Aktualisierte Frage mit zusätzlichen Informationen. – luksan

Antwort

1

Nun, es war nicht mein Code. Es stellt sich heraus, dass, wenn ich die genaue ProvidedTypes-head.fs im verknüpften Beispiel enthaltenen verwenden, dann funktioniert alles wie es sollte. Wenn ich jedoch eine andere Version verwende, wie die ProvidedTypes.fs von FSharp.Data, dann hat es das falsche Verhalten. Ich bin nicht sicher, was der Unterschied zwischen ihnen ist, der das Problem verursacht. Ich bin mir auch nicht sicher, wo ich die "offizielle" Version der Datei finden könnte, wenn es eine tatsächlich gibt.

UPDATE: Sieht so aus, als ob die offizielle Versionist.

Verwandte Themen