.NET MAUI Blazor Hybrid bin目录exe无法运行缺失Microsoft.ui.xaml.dll
Visual Studio调试时的运行保障机制
.NET MAUI Blazor Hybrid应用默认Debug配置生成的产物属于调试专用的中间输出,并非面向直接双击运行设计的完整可执行程序。VS调试时通过以下逻辑绕过依赖缺失问题:
- 启动调试前会自动将全局路径下的WinUI3运行时、.NET MAUI原生组件、平台依赖(包含
Microsoft.ui.xaml.dll)临时加入进程DLL搜索目录,不需要这些文件实际存放在exe所在的bin文件夹 - 自动初始化未打包WinUI3应用所需的激活上下文,配置虚拟注册表映射,跳过原生组件的路径校验逻辑
- 调试宿主进程会自动从全局NuGet缓存、Windows SDK安装目录、.NET运行时安装目录解析所有引用的程序集与原生库,不会仅在exe当前目录查找依赖
直接运行exe的实现方法
不要直接运行bin/Debug目录下的生成产物,可通过以下两种方式得到可直接双击运行的exe:
方法1:通过发布流程生成完整可执行程序(推荐)
这是官方推荐的标准方式,不会出现依赖缺失问题:
- 右键点击解决方案资源管理器中的MAUI项目,选择「发布」,目标平台选择Windows
- 部署模式可按需选择:
- 选「依赖框架」:输出体积小,要求运行设备安装对应版本的.NET桌面运行时与Windows App SDK运行时
- 选「独立」:输出体积大,但会自带所有运行时依赖,不需要目标设备额外安装组件
- 目标运行时选择对应设备架构,常见为
win-x64,不要勾选「生成单个文件」(当前WinUI3与单文件部署存在兼容问题) - 完成发布后,打开发布输出目录,目录内会包含
Microsoft.ui.xaml.dll在内的所有依赖,直接双击目录内的exe即可正常启动。
方法2:修改项目配置让Debug生成完整产物
如果需要直接运行Debug目录下的exe,可修改项目配置让编译时自动拷贝所有依赖:
- 给项目安装与当前VS内置Windows App SDK版本匹配的
Microsoft.WindowsAppSDK.RedistNuGet包 - 双击项目打开
.csproj文件,在主<PropertyGroup>节点下添加以下配置:
<WindowsPackageType>None</WindowsPackageType> <WindowsAppSDKSelfContained>True</WindowsAppSDKSelfContained>
- 重新生成项目,此时bin/Debug对应架构目录下会自动补全所有原生依赖,直接双击exe即可启动。
注意:如果使用的是Visual Studio预览版,内置的Windows App SDK也为预览版本,可能存在依赖拷贝不全的问题,遇到这类情况可切换到正式发布通道重新生成项目验证。
内容的提问来源于stack exchange,提问作者Nick V
相关产品推荐
相关产品推荐

