リンクの追加を使ってServiceReferences.ClientConfigファイルをSilverlightメインプロジェクトから参照する

プロジェクトが複数あるときに、各プロジェクトでサービス参照の追加を行うと同じコードが生成されて無駄になります。また、サービス参照の追加で生成されたサービスクライアントクラスを複数のプロジェクト間でやり取りすることができなくなります。
そこで、サービスクライアントクラスを配置するサービス参照プロジェクトを作成し、複数プロジェクトで共有する構成にします。このとき、ServiceReferences.ClientConfigファイルの配置方法が問題になります。

アジェンダ

  • 参考サイト
  • 想定するプロジェクト構成
  • サービスコールが失敗する
  • ServiceReferences.ClientConfigファイルをリンク参照

想定するプロジェクト構成

今回想定しているプロジェクト構成を示します。

サービスコールが失敗する

メインプロジェクトの直下にServiceReferences.ClientConfigファイルが存在しない状態でサービスコールを行うと、InvalidOperationExceptionがスローされます。

{System.InvalidOperationException: .xap アプリケーション パッケージ内に 'ServiceReferences.ClientConfig' が見つかりません。このファイルは、Web サービスのクライアント プロキシを設定するために使用されます。このファイルにより、アプリケーションで必要なサービスを見つけることができます。このファイルをアプリケーション パッケージ内に含めるか、サービス アドレスおよびバインドを明示的に指定するクライアント プロキシ コンストラクターを使用するようにコードを変更してください。詳細については、内部例外を参照してください。


安易に解決する場合は、ServiceReferenceプロジェクトのServiceReferences.ClientConfigファイルをメインプロジェクトにコピーします。しかし、この方法では、ServiceReferences.ClientConfigファイルが更新されるたびにコピーし直す必要があります。

ServiceReferences.ClientConfigファイルをリンク参照

そこで、メインプロジェクトにリンク参照でServiceReferences.ClientConfigファイルを配置します。
まず、追加 -> 既存の項目を開きます。

次にServiceReferenceプロジェクトのServiceReferences.ClientConfigファイルをリンクの追加で参照します。

これで、メインプロジェクトとServiceReferenceプロジェクトのServiceReferences.ClientConfigファイルを常に同期することができます。