Wie erstelle ich einen F # -Typ Provider für eine generierte Assembly?

8

Ich habe Probleme mit allen Typen, die in einer Assembly für einen F # Generative Type Provider erstellt wurden. Ich habe ein YouTube-Video erstellt, das dies demonstriert.

Die Fehlermeldungen, die ich bekomme, sind:

  • Das Modul / Namespace 'tutorial' aus der Übersetzungseinheit 'Addressbook1' enthielt weder den Namespace, das Modul noch den Typ 'Person'
  • Es wurde ein Verweis auf den Typ 'tutorial.Person' in Assembly 'Addressbook1' gefunden, aber der Typ konnte in dieser Assembly nicht gefunden werden

Ich verstehe nicht, weil der Typ definitiv in der Baugruppe ist. Zur Fehlerbehebung ist die Assembly eine sehr einfache C # -Dll. Der Code im Video ist über Git verfügbar:

git url: Ссылка
Git Zweig: Hilfe

Alle Vorschläge zur Fehlerbehebung werden geschätzt. Ich hoffe, auf einem F # Type weitere Fortschritte zu machen Provider für .proto-Dateien , aber ich bleibe dabei.

    
Cameron Taggart 11.01.2013, 18:07
quelle

1 Antwort

5

Ich habe einen kurzen Blick auf Ihren Code geworfen - wie ich in einem Kommentar erwähnt habe, wäre Ihnen die Verwendung der vom F # 3.0 Sample Pack definierten und in MSDN dokumentierten API-Version sehr hilfreich .

Im Grunde hat die API des rohen Typ-Anbieters eine Menge von Annahmen, die Sie nur schwer manuell verwalten können. Ich denke, dass das spezielle Problem, das Sie haben, ist, dass der Compiler in Ihrer Assembly einen Typ namens tutorial.Person erwartet (da es der Rückgabetyp einer Methode in tutorial.AddressbookProto ist, den Sie als generierten Typ angeben), aber es ist niemals in Ihre Baugruppe eingebettet.

Dies ist jedoch nur eines von mehreren Problemen. Wie Sie wahrscheinlich bemerkt haben, werden zusätzliche Fehler auftreten, wenn der Typ, den Sie definieren, anders als tutorial.AddressbookProto heißt. Das liegt daran, dass Sie einen konkreten Typ als Rückgabewert von ApplyStaticArguments verwenden. Normalerweise möchten Sie jedoch eine synthetische System.Type -Instanz verwenden, die den vom Benutzer verwendeten Namespace und Typnamen genau widerspiegelt (z. B. in der API von AceditedTypes). co_de% class erbt von ProvidedTypeDefinition und behandelt diese Buchhaltung).

    
kvb 11.01.2013 19:30
quelle

Tags und Links