1

私は単純な SharePoint 2010 BCS ソリューションを使用して、2 つのエンティティとそれらの間の単純な親子関係を定義しています。サービス クラス (および) とは別のアセンブリに、たまたまエンティティ クラス (Parentおよび) があります。これは、Finder メソッドと SpecificFinder メソッドのみを使用する場合には問題にならないようですが、AssociationNavigator メソッドを実行しようとすると失敗します。エンティティ タイプが BCS モデル定義と同じアセンブリにあり、サービス クラスが関連付けられている場合、AssociationNavigator は正常に動作します。次のように AssociationNavigator を呼び出しています。ChildParentServiceChildService

var entity_instance_collection = new EntityInstanceCollection(1);
entity_instance_collection.Add(parent_entity_instance);
var association = (IAssociation)parent_entity.GetMethodInstance("ParentToChildAssociationNavigator", MethodInstanceType.AssociationNavigator);
var child_items = child_entity.FindAssociated(entity_instance_collection, association, lobi);

エンティティ型が別のアセンブリにある場合、実行しようとすると InvalidMetadataObjectException が発生しFindAssociatedます。

名前空間 'BdcModelProject2.BdcModel1' の名前 'Parent' のエンティティ (外部コンテンツ タイプ) の名前 'ReadItem' のメソッドの名前 'parent' のパラメーターの TypeDescriptor TypeName 'BdcModelProject2.BdcModel1.Parent, BdcModel1' で記述された型を読み込めません。

このInnerExceptionで:

アセンブリ 'BdcModelProject2、バージョン = 1.0.0.0、カルチャ = ニュートラル、PublicKeyToken = 50bc5a1f7318bdeb' からタイプ 'BdcModelProject2.BdcModel1.Parent' を読み込めませんでした。

したがって、私のアプリは、エンティティが実際に定義されているアセンブリ (ClassLibrary1) ではなく、BCS モデルが定義されているアセンブリ (BdcModelProject2) からエンティティ タイプを読み込もうとしているようです。私はこれについていくつかの混乱のポイントがあります:

  1. BCS モデルには、エンティティ クラスを実装するクラスの型を記述する TypeDescriptors に TypeName 属性があることがわかりますが、Finder メソッドと SpecificFinder メソッドは、ここで意味不明な情報が提供されている場合でも適切に機能しているように見えますが、AssociationNavigator の読み込みに失敗します。タイプ。どうしてこれなの?
  2. Visual Studio で生成された bdcm ファイルまたは MSDN ドキュメントのTypeDescriptorに、エンティティ型のアセンブリ名を指定できる場所を示す場所がありません。

エンティティが別のアセンブリで定義されている場合、BCS プロジェクトでエンティティ タイプを使用するにはどうすればよいでしょうか。

4

1 に答える 1

0

ここには 2 つの可能性があります。

  • dllが見つからない
  • 使用している新しいコードが含まれていない古いバージョンの dll が検出されます。

古いバージョンが GAC にあるという問題がよくあります。新しいバージョンが bin ディレクトリにインストールされると、単にそれを無視し、GAC のバージョンを使用し続けます。次に、GAC でバージョンを削除しますが、古いバージョンがキャッシュされているため、まだ機能しません。最後に、IIS のリセットまたはマシンの再起動により、機能するようになります。

簡単な答え: マシンで古いバージョンの dll を探してみてください。

編集

Assembly Binding Log Viewerなどのツールを使用して、問題を追跡できます。

参照: http://msdn.microsoft.com/en-us/library/e74a18c4(v=vs.90).aspx

于 2012-04-16T19:03:17.043 に答える