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

时间:2018-03-14 15:30:21

标签: c# .net .net-core dynamics-crm

尝试在.NET Core 2.0项目中使用Microsoft Dynamics 365 SDK Core Assemblies时,运行时只会using Microsoft.Xrm.Sdk发生以下错误:

  

TypeLoadException:无法加载类型   ' System.ServiceModel.Description.MetadataConversionError'从   assembly' System.ServiceModel,Version = 4.0.0.0,Culture = neutral,   公钥= b77a5c561934e089'

看起来核心程序集(Microsoft.Xrm.Sdk.Client)可能与~net4x之外的任何内容都不兼容。

是否有任何明显的方法可以解决此错误或在目标System.ServiceModel的上下文中加载Microsoft.Xrm.Sdk所需的WCF netcoreapp2.0类/接口?是否可以使用 Microsoft.Windows.Compatibility弥合差距?看起来像Microsoft.Windows.Compatibility包documentation表示 Windows Communication Foundation(WCF)类/接口是"可用"。如何使用兼容包加载System.ServiceModel.Description

感谢您提供任何帮助!

2 个答案:

答案 0 :(得分:3)

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

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

重要编辑: 我发现,由于各种原因,SDK 2016在Linux的.net core中无法可靠运行,并于2011年停止(nuget包为Microsoft.Xrm.Sdk.2011)。除非出现以下情况,否则它可以正常工作:您context.AddObject并传递了一个没有ID的实体 。 SDK依赖于p /调用本机Windows库来创建连续的UUID并在Linux上崩溃。您可以通过在调用.AddObject()之前设置ID来解决此问题。

答案 1 :(得分:0)

我遇到了同样的问题,当我在Visual Studio中选择模板控制台应用程序(.Net Framework)而不是控制台应用程序(.Net Core)时,问题得到解决。