4

2 つ (またはそれ以上) の異なる CRM 2011 サービス コンテキスト/テナントに接続する VS 2010 C# コンソール アプリケーションを作成したいと考えています。一方のデータを他方のデータで更新できるようにしたい。

crmsvcutil を使用して 2 つの異なる事前バインド クラスを作成すると、次のコンパイラ エラーが発生します。

2 つのファイルを連結すると、コンパイルは実行されますが、「アカウントという名前のプロキシ タイプが複数のタイプによって定義されています」という実行時エラーが発生します。

これはどのように達成できますか?

4

2 に答える 2

5

アーリーバウンドクラスのセットごとに個別のライブラリプロジェクトを作成し、crmsvcutilファイルの1つを各ライブラリに配置します(必要に応じてアセンブリ参照を追加します)。次に、コンソールアプリで、ライブラリへの参照を追加します。

Proxy1.dllとProxy2.dllにコンパイルする2つのライブラリプロジェクトを作成したとしましょう。各ライブラリのルート名前空間は、Proxy1とProxy2です。ConsoleApp.exeで、2つの参照と以下を追加します。

var url1 = new Uri(".../XRMServices/2011/Organization.svc");
var proxy1 = new OrganizationServiceProxy(url1, null, null, null);
proxy1.EnableProxyTypes(Assembly.Load("Proxy1")); // Proxy1.dll

var url2 = new Uri(".../XRMServices/2011/Organization.svc");
var proxy2 = new OrganizationServiceProxy(url2, null, null, null);
proxy2.EnableProxyTypes(Assembly.Load("Proxy2")); // Proxy2.dll

using (var context1 = new Proxy1.Proxy1ServiceContext(proxy1))
using (var context2 = new Proxy2.Proxy2ServiceContext(proxy2))
{
  var accounts1 = context1.AccountSet;
  var accounts2 = context2.AccountSet;

  foreach (var account in accounts1) Console.WriteLine("1: {0}: {1}", account.GetType(), account.Id);
  foreach (var account in accounts2) Console.WriteLine("2: {0}: {1}", account.GetType(), account.Id);
}
于 2012-05-17T19:10:18.000 に答える
0

ICustomizeCodeDomService インターフェイスを実装して、ProxyTypesAssemblyAttribute の自動生成を無効にすることができます。それらが異なる名前空間にある限り、1 つの dll があり、2 つを別々にロードする必要はありません。

** アップデート **

これは機能しません。https://stackoverflow.com/a/24785440/227436をご覧ください

于 2013-08-05T14:03:32.313 に答える