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的事件
- 进程名称选你的WinUI3应用程序名(比如
- 启动应用触发崩溃后,查看日志:
- 注册表项里找访问
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
相关产品推荐
相关产品推荐

