You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VS2022开发MAUI应用连接本地Dynamics 365 CRM API时NuGet包兼容问题咨询

MAUI对接本地Dynamics 365 CRM:NU1605错误与兼容方案

先给你明确结论: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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.27 15:04:07