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

Visual Studio WinUI3项目启动崩溃:如何定位未加载的DLL或类

定位WinUI3项目中未注册COM类/缺失DLL的方法

1. 从投影文件提取COM类标识

从调用栈能看到异常触发自Project.AppPage._IAppPageFactory.Instance,这个_IAppPageFactory是WinRT自动生成的投影类。直接找到项目里的自动生成代码(一般在Generated Files目录下的winrt文件夹中),打开对应文件找到_IAppPageFactory的定义,里面会有类似这样的Guid标识:

[Guid("XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX")]
internal interface _IAppPageFactory : IInspectable
{
    // 生成的接口代码
}

这个Guid就是未注册的COM类的唯一标识符。

2. 用Process Monitor追踪加载失败

  • 启动Process Monitor(ProcMon),设置过滤规则:
    • 进程名称选你的WinUI3应用程序名(比如ProjectName.WASDK.exe)
    • 事件类别勾选File System和Registry
    • 只保留结果为NAME NOT FOUND或ACCESS DENIED的事件
  • 启动应用触发崩溃后,查看日志:
    • 注册表项里找访问CLSID\{刚才拿到的Guid}的失败记录,对应的键值会指向该COM类注册的DLL路径
    • 文件系统项里找加载失败的.dll文件,这些就是缺失或没部署到位的依赖库

3. 调试时查看激活工厂的类信息

在调试器触发异常时,找到调用栈里的WinRT.BaseActivationFactory.BaseActivationFactory(string, string)这一行,右键选查看反汇编,或者在即时窗口输入以下命令:

? this.TypeName
? this.ActivationFactoryId

这两个值会给出尝试激活的WinRT类全名和接口ID,通过类名就能定位到对应的依赖DLL。

4. 检查项目依赖与部署配置

  • 查看项目的引用列表,确认所有WinRT/COM组件都已正确安装
  • 打开Package.appxmanifest,检查Dependencies部分,确保所有依赖的框架包都已包含
  • 右键项目选属性,在部署选项卡中确认“部署依赖项”已勾选,保证必要DLL会被复制到输出目录

内容的提问来源于stack exchange,提问作者yonutix

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 15:40:27