web-dev-qa-db-ja.com

Microsoft Dynamics 365 SDK Core Assemblies .NET Core Porting Error

.NET Core 2.0プロジェクトで Microsoft Dynamics 365 SDK Core Assemblies を使用しようとすると、実行時にusing Microsoft.Xrm.Sdkだけで次のエラーが発生します。

TypeLoadException:アセンブリ 'System.ServiceModel、Version = 4.0.0.0、Culture = neutral、PublicKeyToken = b77a5c561934e089'からタイプ 'System.ServiceModel.Description.MetadataConversionError'をロードできませんでした。

コアアセンブリ(Microsoft.Xrm.Sdk.Client)は、〜net4x以外とは互換性がない可能性があります。

このエラーを回避する、またはターゲットSystem.ServiceModelのコンテキストでMicrosoft.Xrm.Sdkが必要とするWCF netcoreapp2.0クラス/インターフェイスをロードする明白な方法はありますか? Microsoft.Windows.Compatibility を使用してギャップを埋めることはできますか? Microsoft.Windows.Compatibility pack documentation のように見えますWindows Communication Foundation(WCF)クラス/インターフェイスが「利用可能」 。互換パックを使用してSystem.ServiceModel.Descriptionをロードする方法を教えてください。

あなたが提供できるあらゆる助けをありがとう!

13

Githubでの複数の議論によると、私は可能なことをすべて試し、SDK、ServiceModelなどは.netコアと互換性がなく、決して互換性がないと言うことができます。しかし、私はこれを行うことができました:

  • XrmToolBoxとcrmsvcutil.exeを使用してモデルを生成する(オプション)
  • それらをnetstandard2プロジェクトに配置します
  • nugetからXRM SDKを参照する
  • SDKは.netコアの下で部分的に機能し、LINQクエリと生のQueryExpressionsがOrganizationRequestのサブクラスに変換されます。
  • organizationRequestをシリアル化して他のアプリに送信するカスタムIOrganizationServiceを作成する
  • 他のアプリは、そのプロジェクトとXRM SDKを参照する.netコアWeb APIですが、-Windowsの完全なフレームワークで実行され、実際の要求を実行し、応答をシリアル化して返送します。

重要な編集:さまざまな理由により、SDK 2016がLinuxの.netコアで確実に動作しないことがわかり、2011年に停止しました(nugetパッケージは_Microsoft.Xrm.Sdk.2011_)。これは、1つの場合を除いて正常に機能します。_context.AddObject_を実行し、エンティティIDなしを渡す場合。 SDKは、ネイティブWindowsライブラリのp/invokingに依存して、シーケンシャルUUIDを作成し、Linuxでクラッシュします。 .AddObject()を呼び出す前にIDを設定することで、これを克服できます。

4
Rast