Microsoft Dynamics 365 SDK核心程序集.NET核心移植错误

Ale*_*sky 10 .net c# dynamics-crm .net-core

尝试在.NET Core 2.0项目中使用Microsoft Dynamics 365 SDK核心程序集时,运行时只会出现以下错误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所需的WCF 类/接口?是否可以使用 Microsoft.Windows.Compatibility来弥补差距?看起来Microsoft.Windows.Compatibility包文档表明Windows Communication Foundation(WCF)类/接口是"可用的".如何使用兼容包加载?Microsoft.Xrm.Sdknetcoreapp2.0System.ServiceModel.Description

感谢您提供任何帮助!

Ras*_*ast 9

根据 github 上的多次讨论,我尝试了所有可能的事情,可以说 SDK、ServiceModel 等与 .net 核心不兼容,而且永远不会兼容。但是,我能够做到这一点:

  • 使用 XrmToolBox 和 crmsvcutil.exe 生成模型(可选)
  • 将它们放在 netstandard2 项目中
  • 从 nuget 引用 XRM SDK
  • SDK 在 .net 核心下工作,部分 LINQ 查询和原始 QueryExpressions 被转换为 OrganizationRequest 的子类
  • 编写自定义 IOrganizationService 序列化 OrganizationRequests 并将它们发送到其他应用程序
  • 其他应用程序是 .net core web api,它引用该项目和 XRM SDK,但在 Windows上的完整框架上运行并执行实际请求、序列化响应并将它们发送回。

重要编辑:由于各种原因,我发现 SDK 2016 在 linux 上的 .net core 中不能可靠地工作,并在 2011 年停止(nuget 包是Microsoft.Xrm.Sdk.2011)。它工作正常,但在一种情况下:当您执行context.AddObject并传递没有 ID的 Entity。SDK 依赖 p/invoking 本机 Windows 库来创建顺序 UUID 并在 Linux 上崩溃。您可以通过在调用之前设置 ID 来克服这个问题.AddObject()