WinUI 3 应用构建、运行与启动验证完全指南(Build, Run, and Launch Verification)
WinUI 3 应用构建、运行与启动验证完全指南Build, Run, and Launch Verification【免费下载链接】skillsSkills Catalog for Codex项目地址: https://gitcode.com/GitHub_Trending/skills4/skills本文档面向在 Windows 上使用 C# 与 Windows App SDK 开发 WinUI 3 桌面应用的开发者与 AI Agent系统讲解从「构建」到「真实启动验证」的完整闭环流程如何识别打包packaged与未打包unpackaged两种部署模型、如何选择与模型匹配的启动路径、如何用客观证据确认应用真正打开了主窗口以及当启动崩溃、MSB3073、XamlCompiler.exe等故障出现时如何逐步隔离并恢复。读完本文你将能构建一套可重复、可验证的 WinUI 应用「改代码 → 构建 → 启动 → 验证 → 交付」工作流。本文以仓库中 build-run-and-launch-verification.md 为核心骨架并结合 SKILL.md 及其余 reference 文档中的脚手架、配置与排查细则展开。这份参考文档的定位与适用场景build-run-and-launch-verification.md是本技能中优先级标记为CRITICAL的核心参考文件。它在技能的路由表中被明确指派给以下场景见 SKILL.md 的 Common Routes 一节需要构建build、运行run一个 WinUI 应用遇到启动失败launch failures、启动崩溃startup crashes需要对应用做最终验证final verification确认它确实在当前机器上打开了窗口。换句话说只要任务涉及「构建产物是否可用」「应用是否真的起来了」就应当以本文件为行为准则。它强调的核心原则只有一条构建成功 ≠ 运行成功必须用客观证据验证真实启动。配套地技能中还有两份紧密相关的参考文件决定项目形态与打包模型的 foundation-setup-and-project-selection.md以及针对模板级恢复的 foundation-template-first-recovery.md本文会沿用到它们的内容。必选工作流从改代码到交付的七步闭环原文档定义了一套「Required Workflow」要求每次有意义的代码编辑后都要构建任务收尾时再构建一次并在条件允许时运行应用。完整拆解如下识别真实构建目标先弄清楚solution 或 project 文件是哪个.sln/.csproj构建配置Configuration通常为Debug/Release目标平台Platform例如x64部署模型是打包还是未打包。每次有意义编辑后构建一次任务完成时再构建一次——不要只在最后一次性构建。条件允许时运行应用。尤其是当用户明确要求运行或本次改动涉及启动、导航、资源或打包相关代码时必须运行。使用与部署模型匹配的启动路径打包应用的本地开发通常走 Visual Studio 部署F5或其他能感知包package-aware的流程未打包应用的本地开发通常直接运行用户真正会执行的构建产物.exe。用客观证据验证真实启动包括但不限于非零的主窗口句柄main window handle符合预期的窗口标题window title进程响应正常、可见的 Shell 窗口存在没有立即出现的启动异常或崩溃。完成后保留验证通过的实例无论是首次脚手架还是后续「构建-修复」循环只要启动验证成功除非用户明确要求不要运行否则把最终验证通过的实例保持打开让用户能亲眼看到它工作。启动失败或验证结果模糊时必须先调试绝不能直接宣称「应用准备好了」。这七步与本技能在 SKILL.md 中的硬性规则完全一致其中明确要求「任何创建或修改 WinUI 应用的工作都要先做一套完整但最小的编辑集然后默认构建并运行即使客户没有明确要求验证」。如果运行中的实例锁住了输出文件而还有更多工作要做就停止它、重新构建、重新启动继续验证循环。打包 vs 未打包先选模型再写代码原文档强调必须在开始编写启动、持久化和启动说明之前就有意识地选好其中一种模型并给出了三条硬性规则打包应用可以依赖包标识package identity与基于包package-backed的存储未打包应用不得假设存在包标识必须对依赖它的 API 加保护或替换实现Windows.Storage.ApplicationData.Current这类 API 在未打包运行时可能直接失败即使构建完全成功——不要把打包专属假设混进未打包的启动路径。这条规则在技能的其他文档中被反复印证foundation-setup-and-project-selection.md 给出了更完整的决策矩阵场景推荐模型理由默认 WinUI 3 路径、本地 F5 工作流、Store 友好部署打包最顺滑的首个项目、部署与商店兼容路径应用正常运行期需要包标识或基于包的 API打包只有打包模型才具备包标识能力期望每次修改后可重复的 CLI 构建-运行验证未打包直接.exe启动适合 Agent 驱动的本地验证需要集成现有安装器、外部目录或既有桌面应用未打包通过脚手架显式请求该选项windows-app-sdk-lifecycle-notifications-and-deployment.md 补充了底层原因未打包应用必须考虑bootstrapper 与运行时初始化要求除非通过部署模型刻意建立包标识否则未打包应用默认视为无包标识。存储、设置和启动服务必须与部署模型对齐凡是假设了打包存储或激活机制的服务在进行本地未打包验证前都要重新设计。在脚手架阶段就定下模型技能要求通过dotnet new winui脚手架显式指定模型而不是事后转换。来自 SKILL.md 的脚手架命令与支持选项如下dotnet new winui -o AppName [选项]受支持选项不要臆造不存在的 flag选项说明-f|--framework net10.0\|net9.0\|net8.0目标框架版本-slnx|--use-slnx是否使用 slnx 解决方案格式-cpm|--central-pkg-mgmt启用集中包管理-mvvm|--use-mvvm使用 MVVM 结构-imt|--include-mvvm-toolkit包含 MVVM Toolkit-un|--unpackaged未打包模式-nsf|--no-solution-file不生成解决方案文件--force覆盖已存在文件仅在用户明确要求时使用如果用户要求打包行为传--unpackaged false否则保持模板默认值默认即打包。脚手架生成后用dotnet build针对生成的.csproj验证再按对应打包模型的正确路径启动新应用确认存在真实顶层窗口而不是只看启动器进程的退出码。构建与启动指引平台、路径与进程管理原文档在「Build and Launch Guidance」中给出四条实操准则显式指定平台目标。WinUI 输出对架构默认值很敏感如果AnyCPU造成歧义本地验证就用x64。对应命令示例同时可见于 foundation-template-first-recovery.mddotnet build MyApp.sln -c Debug -p:Platformx64未打包验证优先启动构建出的.exe路径形如bin\Debug\...\win-x64\或项目指定的输出路径——这也是用户在真实使用中会直接运行的那个可执行文件。验证成功后不要立刻关掉应用。启动验证成功不等于任务完成保持窗口打开除非它阻塞了下一步必要动作。把dotnet run抛出的 bootstrapper、部署或 COM 激活错误当作信号——它说明当前选定的启动路径或打包设置与现有应用不匹配需要回到打包模型与启动路径的选择上去。重建前先停掉旧实例——如果旧实例锁定了输出文件.exe 被占用导致无法覆盖会直接导致构建失败。结合 foundation-environment-audit-and-remediation.md 的「Required vs Optional」清单正常 C# WinUI 3 开发的前置条件包括受支持的 Windows 构建版本、带 WinUI C# 支持的 Visual Studio、Windows SDK 10.0.19041.0 或更高、可用于 XAML 编译的 MSBuild、.NET SDK 6 或更高Developer Mode 与 WinGet 通常可选但常被推荐。这些前置条件不满足时构建/启动验证无从谈起。启动失败调试区分环境问题与代码问题原文档给出的核心调试原则是先把环境问题与应用代码的启动崩溃分开。如果应用在显示窗口之前就退出先检查启动路径App.xaml合并的资源字典merged resource dictionaries转换器convertersMainWindow启动期间用到的服务foundation-template-first-recovery.md 为「启动或清单类问题」提供了标准恢复回路与本文档衔接如下确认预期的打包模型与启动路径当前启动形态不清晰时用相同打包选择脚手架一个临时对比应用dotnet new winui -n RecoveryReference -o RecoveryReference --use-slnx false --no-solution-file false # 目标应用是未打包时追加--unpackaged true只对启动与共享资源区域做 diffApp.xaml、App.xaml.cs、MainWindow.xaml/MainWindow.xaml.cs或应用实际的 shell 入口点、合并资源字典、启动相关项目属性把可疑区域回退到模板生成形态直到构建恢复干净显式针对具体架构构建如上面的-p:Platformx64命令用正确的打包/未打包路径启动确认客观启动信号以小块为单位重新应用自定义修改每次有意义的编辑后都构建并运行。对于不透明的MSB3073和XamlCompiler.exe失败原文档的处置是先把结构简化回模板生成的启动与共享资源形态再做更激进的结构改动。附带几条细则失败点不明确时增量恢复复杂的启动片段——最小化的App.xaml加最小化的MainWindow是合法的隔离步骤诊断信息看起来过时或与当前文件不一致时先做一次干净构建再深入排查长期修复优先恢复「最后一次已知良好」的模板化共享资源状态而不是把样式内联进页面作为永久方案后者被明确列为 Avoid未打包启动时务必审查持久化、通知、存储与激活代码里隐藏的包标识假设。其他常见恢复检查项同样来自模板优先恢复文档确认 WinUI 3 启动代码没有使用Window.Current应使用显式new Window()确认x:Class、命名空间与 code-behind 名称仍然匹配确认合并资源字典干净加载后再叠层确认项目内容项与运行时期望的本地数据/资源文件一致。退出标准什么才算「真的完成了」原文档以四条 Exit Criteria 收束这也是每次交付前必须逐条核对的门槛从预期的本地工作流构建成功——不是换一种歪门邪道的命令而是用户实际会用的那条路径从预期的本地工作流启动成功——启动路径与打包模型匹配确认存在真实的顶层窗口或等价预期 UI——进程起来了不够窗口必须真实存在没有未解决的启动异常——不能带着悬挂的异常交付。testing-debugging-and-review-checklists.md 把验证循环扩展到了更完整的交付面构建通过、功能在目标机器配置上可用、应用启动并显示预期 shell 或窗口、亮/暗/高对比模式下可用、主流程可键盘访问、缩放行为/启动/交互响应性都已检查。调试工具方面视觉迭代用Hot Reload布局与属性排查用Live Visual Tree 与 Live Property Explorer帧与响应性问题用WPR / WPA当进程在窗口出现前死亡时使用**启动异常详情、调试器输出或事件查看器Event Viewer**定位问题。与脚手架工具链的衔接从环境就绪到启动验证本技能把「环境就绪」「打包选择」「启动验证」视为三项互相独立的检查——通过一项不能证明其他项见 SKILL.md 的 Environment Rules。因此在做启动验证之前机器应当已经通过技能内置的引导流程完成准备winget configure -f config.yaml --accept-configuration-agreements --disable-interactivity这条命令以技能目录下的 config.yaml 为唯一事实来源其内容会启用 Developer ModeMicrosoft.Windows.Settings/WindowsSettingsDeveloperMode: true、安装 Visual Studio Community 2026Microsoft.WinGet.DSC/WinGetPackageid 为Microsoft.VisualStudio.Community、并通过Microsoft.VisualStudio.DSC/VSComponents安装Microsoft.VisualStudio.Workload.ManagedDesktop、Microsoft.VisualStudio.Workload.Universal与Microsoft.VisualStudio.ComponentGroup.WindowsAppSDK.Cs三个组件同时以断言验证操作系统不低于10.0.17763。模板可用性也要先确认dotnet new list winui只有模板就绪、工具链可用dotnet new winui脚手架出来的项目才有资格进入本文的「构建 → 运行 → 启动验证」闭环。整套流程在技能中的分工可参考 _sections.md构建/运行/启动验证问题路由到本文档模板级恢复路由到foundation-template-first-recovery.md机器就绪检查路由到foundation-environment-audit-and-remediation.md。小结WinUI 3 应用的「完成」定义不是编译通过而是从用户实际使用的工作流中构建成功、以匹配部署模型的路径启动、出现真实顶层窗口、无未解决启动异常。围绕这一定义本文完整展开了必选工作流七步、打包/未打包决策与 API 边界、平台与路径选择、启动故障的模板优先恢复法以及最终退出标准并与仓库中 SKILL.md、config.yaml 及各 CRITICAL/HIGH 级参考文档相互印证形成一套可直接执行的开发与验证纪律。【免费下载链接】skillsSkills Catalog for Codex项目地址: https://gitcode.com/GitHub_Trending/skills4/skills创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考