VS2022开发MAUI应用连接本地Dynamics 365 CRM API时NuGet包兼容问题咨询
先给你明确结论:Microsoft.CrmSdk.XrmTooling.CoreAssembly确实和MAUI存在兼容性问题。这个包是针对传统.NET Framework和早期.NET Core场景打造的,依赖的旧版NuGet包(比如你用到的Microsoft.IdentityModel.Clients.ActiveDirectory 3.19.8)和MAUI基于的.NET 6+运行时的依赖版本不匹配,才会触发这种NU1605包降级错误。
下面给你分两种思路来解决:临时绕开错误,以及长期推荐的对接方案。
一、临时缓解NU1605错误(不推荐长期使用)
如果你只是想先把错误消掉试试,可以直接在MAUI项目里显式引用冲突的包,指定更高的兼容版本:
- 右键项目 → 管理NuGet程序包,搜索安装
Microsoft.Win32.Primitives(选4.3.0及以上版本) - 同样安装
System.Net.Primitives(4.3.0及以上版本) - 或者直接在你的
Project1.csproj里加这段代码:
<PackageReference Include="Microsoft.Win32.Primitives" Version="4.3.0" /> <PackageReference Include="System.Net.Primitives" Version="4.3.0" />
不过要注意,这只是强制覆盖版本的权宜之计,后续很可能出现运行时的兼容性问题(比如平台特定API调用失败),所以不建议作为长期方案。
二、MAUI对接Dynamics 365的推荐方案
MAUI是跨平台框架,微软官方更推荐用Dynamics 365 Web API(RESTful接口)来对接,完全不需要依赖旧的XrmTooling包;另外还有一个专门适配现代.NET平台的客户端包可以选,具体看下面:
1. 方案一:直接调用Web API(轻量灵活)
Web API是Dynamics 365的原生REST接口,所有平台都支持,步骤如下:
- 先确认你的本地Dynamics 365的Web API端点,格式一般是:
https://<你的CRM地址>/api/data/v9.2/ - 认证:如果本地部署集成了Azure AD或AD FS,用
Microsoft.Identity.Client(MSAL)获取访问令牌(替代旧的ADAL包);如果是Windows平台的MAUI应用,也可以直接用当前用户的Windows凭据 - 用
HttpClient调用接口获取数据,示例代码:
// 用MSAL获取令牌(Azure AD集成场景) var pca = PublicClientApplicationBuilder.Create("<你的客户端ID>") .WithAuthority("https://login.microsoftonline.com/<你的租户ID>") .WithRedirectUri("msal<你的客户端ID>://auth") .Build(); var authResult = await pca.AcquireTokenInteractive(new[] { "<CRM API的权限范围>" }) .ExecuteAsync(); // 调用Web API获取账户数据 using var client = new HttpClient(); client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", authResult.AccessToken); client.DefaultRequestHeaders.Add("OData-MaxVersion", "4.0"); client.DefaultRequestHeaders.Add("OData-Version", "4.0"); client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); var response = await client.GetAsync("https://<你的CRM地址>/api/data/v9.2/accounts"); if (response.IsSuccessStatusCode) { var accountData = await response.Content.ReadFromJsonAsync<JObject>(); // 这里处理返回的账户数据 }
2. 方案二:使用Microsoft.PowerPlatform.Dataverse.Client(强类型操作)
如果你习惯用类似XrmTooling的强类型方式操作数据,可以用微软推出的Microsoft.PowerPlatform.Dataverse.Client包——这是专门适配.NET 6+、MAUI等现代平台的Dataverse客户端库,完全兼容MAUI,支持本地部署的Dynamics 365:
- 先安装这个NuGet包
- 用连接字符串初始化客户端,示例代码:
var connectionString = "AuthType=OAuth;Url=https://<你的CRM地址>;ClientId=<你的客户端ID>;RedirectUri=msal<你的客户端ID>://auth;TenantId=<你的租户ID>"; using var serviceClient = new ServiceClient(connectionString); if (serviceClient.IsReady) { // 查询账户数据 var query = new QueryExpression("account"); query.ColumnSet.AddColumns("name", "accountid"); var results = serviceClient.RetrieveMultiple(query); // 遍历处理查询结果 foreach (var account in results.Entities) { Console.WriteLine(account["name"]); } }
总结
别再纠结Microsoft.CrmSdk.XrmTooling.CoreAssembly了,它和MAUI的兼容性问题很难从根本上解决。优先选Web API或者Microsoft.PowerPlatform.Dataverse.Client,这俩都是官方推荐的方案,完全适配MAUI,还能避免各种依赖冲突的麻烦。
内容的提问来源于stack exchange,提问作者Abed ElHameed Jaber

