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

在WPF应用中调用UWP类库遇类型未注册错误求助

问题描述

使用Visual Studio 2022搭建解决方案,包含一个WPF C# UI应用和一个C++编写的Universal Windows (UWP)类库,前者引用后者。编译时C#编译器可识别类库中的类,但运行UI应用时,首次实例化UWP类会抛出以下异常:

System.TypeLoadException: 'Requested Windows Runtime type 'MyLib.MyClass' is not registered.'
COMException: Class not registered (Exception from HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG))

疑问:这是常规COM注册问题还是其他原因?UWP库没有DllRegisterServer,无法用regsvr32注册,WPF可执行文件所在的bin\Debug目录中已有该DLL副本。调试输出显示类库的winmd文件已加载,但库本身未加载。此前有类似问题是关于.NET调用系统UWP API,而非自定义类库。补充:该问题并非WPF特有,测试的.NET Framework控制台项目也出现同样情况。

原因分析与解决方法

这不是常规COM注册问题,核心原因是自定义UWP类库需要通过Appx部署才能被.NET Framework应用正确加载,UWP组件的加载机制和传统COM组件完全不同:

  • UWP组件基于Windows Runtime (WinRT),依赖Appx包的注册机制,而非传统的注册表COM注册。即使把DLL复制到输出目录,系统也无法识别它是合法的WinRT组件。
  • 调试输出中winmd文件加载只是让编译器识别类型,实际运行时需要组件的Appx注册信息来定位和加载DLL。

解决步骤

  1. 将UWP类库打包为Appx包
    • 在Visual Studio中右键UWP类库项目,选择「发布」->「创建应用包」,按向导生成Appx包(可选择本地测试证书)。
  2. 部署Appx包
    • 双击生成的Appx包完成安装,或使用PowerShell命令:Add-AppxPackage -Path "你的包路径\MyLib_1.0.0.0_x64_Debug.appx"
  3. 统一目标平台
    • 确保WPF/控制台项目的目标平台与UWP类库一致(如均为x64),避免架构不匹配导致加载失败。
  4. 验证部署状态
    • 打开PowerShell运行Get-AppxPackage | Where-Object {$_.Name -eq "MyLib"},确认包已正确安装。

开发调试优化

如果是开发阶段调试,可让Visual Studio自动部署UWP组件:

  • 右键解决方案选择「属性」->「启动项目」,选择「多个启动项目」,将UWP类库项目的操作设为「部署」,WPF项目设为「启动」。每次调试时VS会自动部署UWP组件,无需手动打包安装。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.13 18:33:11