【问题标题】:Microsoft Dynamics 365 SDK Core Assemblies .NET Core Porting ErrorMicrosoft Dynamics 365 SDK 核心程序集 .NET Core 移植错误
【发布时间】:2018-08-23 05:16:03
【问题描述】:

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

TypeLoadException:无法加载类型 'System.ServiceModel.Description.MetadataConversionError' 来自 程序集'System.ServiceModel,版本=4.0.0.0,文化=中性, PublicKeyToken=b77a5c561934e089'。

看起来核心程序集 (Microsoft.Xrm.Sdk.Client) 可能根本不兼容 ~net4x 以外的任何东西。

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

感谢您提供的任何帮助!

【问题讨论】:

  • SDK 肯定不兼容 dotnet core。为什么不直接使用 4.5.2?或者考虑 3rd 方 Dynamics WebApi 助手\代理,例如 github.com/davidyack/Xrm.Tools.CRMWebAPI
  • 我们的目标是利用 .NET Core 作为微服务的性能和可移植性。 CRMWebApi 和 ADAL 可能根本不是一个选项,因为目标 CRM 不在 Azure Active Directory 上。据我所知,客户端凭据流只能在 Dynamics 上下文中与 Azure Active Directory 结合使用。

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


【解决方案1】:

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

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

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

【讨论】:

  • 至于添加对 Web 服务的引用 - 您是否尝试创建新的 .NET Standard 库,添加对 Connected Services 的引用,然后在 ASP.NET Core 项目中引用您的库?
  • 我尝试添加连接的服务,但失败了,因为它们也依赖服务模型
  • 如果“网络服务”是指 CRM 2015/2016 中提供的新的 odata web api,我没有尝试过,因为我们公司只有 CRM 2013 并且那里的 odata 支持非常有限。
  • 我使用这种方式从.NET Standard 库中连接到旧的WSDL Web 服务(意味着生成代理类),然后我从我的ASP.NET Core 项目中引用并使用了它。跨度>
  • 您能否添加更多关于如何完成这些步骤的详细信息?我看不到如何从 netstandard 项目中引用 XRM SDK。此外,您的最后一步说“其他应用程序是 .net core web api”......应该是 .NET 框架吗?好像打错了。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-18
    • 2018-11-09
    • 2018-06-08
    相关资源
    最近更新 更多