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

ARM64设备上UWP应用调用AcquireTokenInteractive接口崩溃问题咨询

UWP应用ARM64环境下MSAL登录崩溃问题解答

问题背景

在ARM64设备上,UWP应用调用Microsoft Identity Client(MSAL)的AcquireTokenInteractive接口时,会因SharedLibrary.dll抛出异常崩溃,但在x64设备上运行完全正常。目前已知的临时解决方案是在项目的配置属性组中添加以下配置:

<UseDotNetNativeSharedAssemblyFrameworkPackage>false</UseDotNetNativeSharedAssemblyFrameworkPackage>

示例代码

using Microsoft.Identity.Client;
using System;
using System.Diagnostics;
using System.Threading.Tasks;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;

namespace MSFeedSignInSampleApp
{
    public sealed partial class MainPage : Page
    {
        private AuthenticationResult authResult = null;
        private IPublicClientApplication publicClientApp;
        private string[] scopes = new string[] { "User.Read", "Notes.ReadWrite" };
        private const string clientId = "YOUR_CLIENT_ID";

        public MainPage()
        {
            this.InitializeComponent();
        }

        private void SignIn_ButtonClick(object sender, RoutedEventArgs e)
        {
            Debug.WriteLine("SignIn_ButtonClick starts");
            SignInAsync();
            Debug.WriteLine("SignIn_ButtonClick ends");
        }

        private async Task SignInAsync()
        {
            try
            {
                if (publicClientApp == null)
                {
                    publicClientApp = PublicClientApplicationBuilder.Create(clientId).Build();
                }

                authResult = await publicClientApp.AcquireTokenInteractive(scopes)
                                                      .ExecuteAsync()
                                                      .ConfigureAwait(false);

                Debug.WriteLine("Username:" + authResult.Account.Username + ", AccessToken: " + authResult.AccessToken);
            }
            catch (Exception ex)
            {
                Debug.WriteLine("Exception message: " + ex.Message);
            }
        }
    }
}

疑问解答

1. 为何该问题仅出现在ARM64设备上?

核心原因是.NET Native编译器针对ARM64架构的编译逻辑存在兼容性缺陷:MSAL库调用系统组件(如SharedLibrary.dll)时,ARM64版本的编译产物出现了内存访问错误或调用约定不匹配的问题。而x64架构的.NET Native编译链路经过长期迭代,相关兼容性问题已被修复,因此不会触发崩溃。

2. UseDotNetNativeSharedAssemblyFrameworkPackage的作用是什么?设为false为何能解决问题?

  • 作用:该配置控制UWP应用是否使用系统共享的.NET Native框架包。开启时,应用会复用系统预装的.NET Native运行时组件;设为false时,应用会将.NET Native框架组件打包到自身安装包中,使用独立的运行时副本。
  • 解决原理:系统共享的ARM64版本.NET Native框架包存在未修复的bug,而独立打包时,应用使用的是针对自身项目编译生成的框架组件,避开了共享包中的缺陷。

3. 添加该配置后可能产生哪些副作用?

  • 安装包体积增大:需要打包完整的.NET Native框架组件,应用包大小会增加几十MB。
  • 无法受益于系统框架更新:系统共享包推送安全补丁或功能更新时,应用无法自动获取,需自行发布更新来同步框架修复。
  • 编译时间延长:独立打包需要编译更多框架代码,会增加项目的构建耗时。

4. 是否存在其他替代解决方案?

  • 升级MSAL库到最新稳定版:MSAL团队后续版本可能已修复ARM64下的兼容性问题,优先尝试升级。
  • 捕获详细崩溃日志:启用ARM64调试模式获取完整堆栈信息,提交给MSAL团队定位具体问题,等待官方修复。
  • 回退.NET Native工具链:如果是新版本.NET Native引入的问题,尝试降级到之前稳定的工具链版本。

内容的提问来源于stack exchange,提问作者Md. Faisal Habib

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 03:39:55