Microsoft Dynamics 365 SDK核心程序集.NET Core移植报错求助
解决.NET Core 2.0中使用Dynamics 365 SDK的TypeLoadException问题
这个问题确实踩中了传统Dynamics 365 SDK的一个痛点:早期的核心组件(比如Microsoft.Xrm.Sdk.Client)是完全基于.NET Framework构建的,而.NET Core 2.0并没有内置完整的WCF相关组件,导致运行时找不到System.ServiceModel.Description.MetadataConversionError这个依赖类型。下面给你几个实用的兼容方案:
方案一:使用官方.NET Core专属客户端包(首推)
微软后来专门针对跨平台场景推出了Microsoft.PowerPlatform.Dataverse.Client包,完全替代了旧版SDK组件,从根源上解决了.NET Framework依赖问题。
- 先通过NuGet安装这个包:
Install-Package Microsoft.PowerPlatform.Dataverse.Client - 然后用
ServiceClient替代原来的OrganizationServiceProxy来连接Dynamics 365,示例代码如下:
这个方案是微软目前推荐的标准方式,稳定性和兼容性都拉满,还支持后续.NET版本的无缝升级。using Microsoft.PowerPlatform.Dataverse.Client; using Microsoft.Xrm.Sdk; var connectionString = "AuthType=OAuth;Url=https://your-org.crm.dynamics.com;UserName=user@domain.com;Password=your-pass;AppId=your-app-id;RedirectUri=app://58145B91-0C36-4500-8554-080854F2AC97"; using (var serviceClient = new ServiceClient(connectionString)) { if (serviceClient.IsReady) { // 执行Dynamics操作,比如WhoAmI测试 var whoAmIRequest = new WhoAmIRequest(); var whoAmIResponse = (WhoAmIResponse)serviceClient.Execute(whoAmIRequest); } }
方案二:补充WCF兼容包(针对必须保留.NET Core 2.0的场景)
如果因为项目限制无法升级框架或替换SDK,可以手动安装.NET Core的WCF兼容包来填补缺失的类型:
- 安装适配.NET Core 2.0的WCF相关NuGet包:
Install-Package System.ServiceModel.Primitives -Version 4.5.3 Install-Package System.ServiceModel.Http -Version 4.5.3 Install-Package System.ServiceModel.Duplex -Version 4.5.3 - 另外,需要在项目的
.csproj文件中添加绑定重定向配置,确保SDK能正确找到兼容的组件版本:<ItemGroup> <PackageReference Include="System.ServiceModel.Primitives" Version="4.5.3" /> </ItemGroup> <PropertyGroup> <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects> <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType> </PropertyGroup>
方案三:升级项目到.NET Core 3.1或更高版本
.NET Core 3.0开始内置了更完整的WCF兼容层,对.NET Framework组件的兼容性大幅提升。升级到.NET Core 3.1(长期支持版本)或者后续的.NET 5/6/7后,不仅能直接解决这个类型加载问题,还能获得更多性能优化和安全更新,同时也能更好地支持最新的Dynamics 365功能。
额外提醒
旧版Microsoft.Xrm.Sdk.Client中的类(比如OrganizationServiceProxy)即使通过方案二解决了类型问题,在.NET Core环境下仍可能遇到其他隐性兼容性问题,所以优先推荐方案一的新客户端包。
内容的提问来源于stack exchange,提问作者Alexander Staroselsky
相关产品推荐
相关产品推荐

