求助:解决使用Windows App SDK的.NET类库测试时出现的REGDB_E_CLASSNOTREG类未注册异常
我最近也踩过这个坑,太懂这种一跑测试就报类未注册的崩溃感了!给你整理几个亲测有用的排查和解决步骤,你可以挨个试:
先对齐目标框架和WinAppSDK版本
首先确认你的测试项目和类库的目标框架完全匹配,比如类库用的是net6.0-windows10.0.19041.0这种Windows平台特定框架,测试项目就不能用普通的net6.0,必须选对应的Windows平台框架。而且两个项目引用的Microsoft.WindowsAppSDKNuGet包版本要完全一致,差一个小版本都可能出问题。给测试项目启用WinRT支持
如果你的类库用到了WinRT组件(WinAppSDK很多功能基于WinRT),测试项目默认可能没开启WinRT支持。你可以右键测试项目→编辑项目文件,在<PropertyGroup>节点里加上一行:<EnableWindowsRuntimeSupport>true</EnableWindowsRuntimeSupport>保存后重新生成项目,这一步对xUnit、NUnit这类第三方测试框架特别重要。
统一目标架构,别用Any CPU
WinAppSDK的很多组件是架构绑定的,x64、x86不能混用。把类库和测试项目的目标平台都改成相同的(比如都设为x64),然后在Visual Studio的顶部菜单里找到「测试」→「测试设置」→「默认处理器架构」,也改成对应的x64,避免因为架构不兼容导致组件找不到。修复WinAppSDK运行时
有时候是WinAppSDK的运行时组件注册不全,你可以去Windows设置→应用→应用和功能,找到「Microsoft Windows App SDK Runtime」,点击「修改」然后选择「修复」,等修复完成后再重新运行测试。关于你加的ComVisible和GUID
其实这个设置对WinAppSDK的WinRT类库来说作用不大,除非你的类库真的需要和传统COM组件交互。如果前面的步骤都试过还是不行,可以先把这两行注释掉,排除干扰项。
我当时是因为测试项目用了Any CPU,改成x64又加了WinRT支持就解决了,你可以先从架构和框架版本这两个点入手排查!
备注:内容来源于stack exchange,提问作者An enthusiast




