2

複数のドメインを使用しているときにすでに参照されているタイプのコード生成を回避する方法はありますか?

説明させてください。


Silverlightアプリケーション用のアプリケーションインフラストラクチャがあります。このインフラストラクチャパッケージには、サーバー側の3つの(RIA)ドメインサービス(認証、ロギング、サービス検出)が含まれています-Infra.Web.dllとsilverlight dll-アプリケーションの開始時にユーザー認証を実装するClientInfra.dllおよびその他の基本クラス( BaseAppやBaseViewのように)、Infra.Web.dllはClientInfra.dllのWCFRIAサービスリンクとして定義されています。

現在、インフラストラクチャをテストするために、デモ用のSilverlightアプリケーションを開発しています。私は作成しました

Infra.Web.dllを参照する DemoApp.Web(インフラサービスを取得するため)

および2つのSilverlightプロジェクト:

生成されたコードと参照ClientInfra.dllを取得するために、 DemoApp.Web.dllをWCFRIAサービスリンクとして定義する DemoApp.Data

ClientInfra.dllを参照する実際のSilverlightアプリケーションであるDemoApp

問題は、SilverlightアプリケーションからRIAサービスの1つを使用しようとすると、ドメインサービスクラスがClientInfra.dllDemoApp.Dataの両方で定義されているというエラーが発生することです。私が理解している限り、問題はInfra.Web.dllからのコードが2回生成されていることです。1つ目はClientInfra.dll用、2つ目はDemoApp.Data用です。

ClientInfra.dllがすでに生成されたインフラサービスを持っているので、 DemoApp.Dataで再度生成する必要がない私の場合のように、すでに参照されているタイプのコード生成を回避する方法はあります か?

質問をもっと簡単にしようと思います。参照するdll用に既に生成されているタイプのriaサービスタイプの生成(Silverlightで)を回避するにはどうすればよいですか?タイプ生成の重複により、同じタイプが2つの異なるdllで定義されているというエラーCS0433が発生します。

私はいくつかの興味深い事実を見つけました。DemoApp(Silverlightアプリケーションプロジェクト)から直接ClientInfra.dllを参照すると、 ClientInfra.dllで生成されたデータ型が再度生成されなくなります。しかし、 DemoApp.DataからClientInfra.dllを参照すると、重複したタイプのコードが生成され、参照されたdllと生成されたコードの両方で同じタイプが定義されているというコンパイル警告が表示されます。

4

2 に答える 2

4

私はmsdnのドキュメントで次のことを見つけました

ドメインサービスクラス、エンティティクラス、または共有コードについて、中間層プロジェクトによって構築または参照されたすべてのアセンブリを分析します。

RIAサービスは、プロキシクラスを生成する前に既存のメンバーをチェックします。すでに定義されているメンバーは、プロキシクラスで生成されません。

つまり、私のシナリオは期待どおりに機能するはずです。

コード生成プロセスを確認するために、出力の詳細度をビルドするようにMSBuildプロジェクトを設定しました([ツール]->[オプション]->[プロジェクトとソリューション]->[ビルドと実行])。次に、コンパイル後、DemoApp.Dataプロジェクトがすでに生成されたプロキシを含むClientInfra.dllをロードできなかったことを発見しました。したがって、ジェネレータはそれを無視し、最初からすべてのクラスを生成しました。

この読み込みの問題を解決し、すべてが正常に機能するようになりました。

于 2013-01-07T08:30:35.337 に答える
0

私は同様のインフラストラクチャを持っていますが、ドメインサービスをSOAPで公開し、他のアプリでサービスを利用しているので、プロジェクトでも同じことを行う必要があります。

于 2013-01-05T19:52:14.050 に答える