9

F# ジェネレーティブ タイプ プロバイダーのアセンブリで作成されたタイプの使用に問題があります。これを示すYouTube ビデオを作成しました。

私が得るエラーメッセージは次のとおりです。

  • コンパイル ユニット 'Addressbook1' のモジュール/名前空間 'tutorial' には、名前空間、モジュール、または型 'Person' が含まれていませんでした
  • アセンブリ 'Addressbook1' でタイプ 'tutorial.Person' への参照が見つかりましたが、そのアセンブリでタイプが見つかりませんでした

型は間違いなくアセンブリにあるのでわかりません。これをトラブルシューティングするために、アセンブリは非常に基本的な C# dll です。ビデオのコードは git から入手できます。

git URL: https://code.google.com/p/froto/
git ブランチ: ヘルプ

トラブルシューティングのアイデアをいただければ幸いです。.proto ファイル用の F# Type Provider をさらに進めたいと思っていますが、これで行き詰まっています。

4

1 に答える 1

5

私はあなたのコードを簡単に見てみました - コメントで述べたように、F# 3.0 サンプル パックで定義され、MSDN で (少し) 文書化されている ProviderdTypes API を使用することで、はるかに優れたサービスが提供されると思います。

基本的に、生の型プロバイダー API には多くの仮定が組み込まれているため、手動で維持するのは困難です。あなたが抱えている特定の問題は、コンパイラがtutorial.Personアセンブリで名前が付けられた型を見ることを期待していることだと思います(tutorial.AddressbookProto生成された型として公開している on のメソッドの戻り値の型であるため)が、に埋め込まれていませんあなたのアセンブリ。

ただし、これは実際にはいくつかの問題の 1 つにすぎません。お気づきかもしれませんが、定義している型がtutorial.AddressbookProto. これは、具体的な型を からの戻り値として使用しているためですが、通常は、ユーザーが使用した名前空間と型名を正確に反映ApplyStaticArgumentsする合成インスタンスを使用する必要があります (たとえば、ProvidedTypes API では、クラスが継承してこの簿記を処理します)。 )。System.TypeProvidedTypeDefinitionSystem.Type

于 2013-01-11T19:30:14.767 に答える