如何修复:创建WindowsXamlHost组件失败,找不到指定Windows Runtime类型
我之前碰到好几个开发者遇到过一模一样的错误,大概率是NuGet包版本不兼容或者安装不完整导致的,给你几个靠谱的排查和修复步骤:
检查NuGet包版本兼容性
确保你安装的Microsoft.Toolkit.Forms.UI.XamlHost包版本和.NET Framework 4.8环境匹配,优先选择最新的稳定版。另外要注意,别混合安装不同版本的Windows Community Toolkit相关包——比如不要同时装老版本的Microsoft.Toolkit.Win32.UI.XamlHost和新版的Forms包。如果之前装过旧版本,先完全卸载再重新安装。清理项目缓存并重新生成
项目缓存文件经常会引发这类加载问题,按下面的步骤操作:- 关闭Visual Studio
- 删除项目目录下的
bin和obj文件夹 - 删除解决方案目录下的
.vs隐藏文件夹(需要先开启显示隐藏文件) - 重新打开项目,右键点击项目选择清理,之后再选择生成
确认WinRT组件引用是否正确
错误提示找不到IXamlMetadataContainer接口,可能是项目没正确引用相关WinRT组件。你可以手动检查:
右键项目 → 添加 → 引用 → 选择Windows Runtime,找到Microsoft.Toolkit.Win32.UI.XamlHost相关组件并勾选(如果存在)。要是找不到,说明NuGet包安装不完整,重新安装一次即可。检查Visual Studio的Windows SDK版本
UWP控件依赖Windows SDK,确保你安装的SDK版本和NuGet包要求一致。可以在Visual Studio的工具 → 获取工具和功能里,检查是否安装了Windows 10/11 SDK(建议19041及以上版本)。尝试手动注册WinRT组件
如果上面的步骤都没用,试试手动注册相关dll。找到NuGet包安装目录下的Microsoft.Toolkit.Win32.UI.XamlHost.dll(一般在packages\Microsoft.Toolkit.Forms.UI.XamlHost.x.x.x\lib\net48目录下),然后以管理员身份打开命令提示符,执行:regsvr32 "你的文件路径\Microsoft.Toolkit.Win32.UI.XamlHost.dll"记得替换成实际的文件路径。
要是还解决不了,你可以新建一个干净的.NET Framework 4.8 WinForms项目,只安装Microsoft.Toolkit.Forms.UI.XamlHost包再添加组件试试——如果新项目能正常工作,那就是原项目有配置冲突,对比两个项目的配置差异就能找到问题所在。
内容的提问来源于stack exchange,提问作者Apollo199999999

