繁体   English   中英

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

[英]Microsoft Dynamics 365 SDK Core Assemblies .NET Core Porting Error

尝试在 .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 以外的任何东西都不兼容。

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

感谢您提供任何帮助!

根据 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 核心中可靠地工作,并在 2011 年停止(nuget 包是Microsoft.Xrm.Sdk.2011 )。 它工作正常,但在一种情况下除外:当您执行context.AddObject并传递没有 ID 的 Entity 时 SDK 依赖于 p/调用本机 Windows 库来创建顺序 UUID 并在 Linux 上崩溃。 您可以通过在调用.AddObject()之前设置 ID 来解决这个问题。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM