Skip to content

Visual Studio 内嵌预览

⚠️ 非常粗糙/实验性。 这是本已处于实验阶段的 Reactor 仓库中最粗糙的一处功能面。它的用途是就「内嵌预览」这一方向收集早期反馈,而不是供日常开发可靠使用。在打磨完成之前,请预期安装摩擦、解决方案加载竞态、HWND/DPI 边界情况、空白窗口缺陷,以及破坏性变更。

Visual Studio 内嵌预览把实时的 Microsoft.UI.Reactor(Reactor)组件托管在 Visual Studio 工具窗口中 —— 需要 Visual Studio 2022 (17.8+) 或 Visual Studio 2026 (18.x),并安装 Visual Studio 扩展开发工作负载。与以截图流方式工作的 VS Code 预览不同,Visual Studio 扩展嵌入的是真正的 WinUI 表面,因此鼠标、键盘、焦点、弹出窗口以及无障碍树检查都能针对运行中的应用生效。

何时使用

当你在 Visual Studio 中构建 Reactor 桌面应用,并希望有一个可交互的预览停靠在编辑器旁边时,使用 Visual Studio 扩展。当需要跨编辑器的缩略图流,或你不在 Visual Studio 中工作时,使用 VS Code 扩展;它仍是可移植的预览方案,但不具备交互性。

安装

VS 扩展 README 中的开发者说明构建并安装 VSIX。Phase 1 可能以未签名形式分发供开发使用,因此 Visual Studio 可能提示扩展未签名。做本地验证时,先安装到 Experimental 配置单元(/RootSuffix Exp,在 Reactor.VsExtension 上按 F5 会自动这样做),然后打开一个 Reactor 示例或应用项目并显示 Reactor Preview 工具窗口。

不要把 VSIX 当作打磨完成的产品安装包。它目前是供试验与反馈之用的开发者冒烟产物。

工具窗口基础

加载 Reactor 项目后,在 Visual Studio 中打开 Reactor Preview 工具窗口。扩展会发现活动项目中的 Reactor 组件类,以 dotnet watch run -- --devtools run --embed 启动目标进程,然后把子进程的 WinUI HWND 重新挂载到工具窗口的占位区域中。

组件选择器是工具窗口外框中的一个 ComboBox。默认情况下它会自动跟随当前活动编辑器文件,并选中该文件中找到的第一个组件。手动选择某个组件会固定该选择,直到你再次切换。当构建、热重载或握手过程卡住时,可点击 ↻ 按钮强制重新加载子进程。

热重载行为

  • L1 热重载 —— Render 方法体内的编辑通常就地生效。内嵌 UI 会刷新,而不会重建占位 HWND。
  • L2 重启进程 —— 记录/类型结构变更这类「粗暴编辑」会导致 dotnet watch 重新构建并重启子进程。扩展会检测到新的端口/令牌对,并把新的子进程重新嵌入同一个占位区域,通常在 10 秒左右完成。

已知限制

  • 目标 Reactor 应用要求 WinAppSDK 1.6 或更高版本。
  • 建议使用 Windows 11 23H2 或更高版本,以获得最可靠的跨进程 WinUI HWND 托管。
  • Visual Studio 工具窗口与内嵌的 Reactor 表面必须在 DPI 感知上一致;不一致会被拒绝,并给出可操作的错误信息。
  • Visual Studio 与 Reactor 应用必须以相同的权限级别运行。Phase 1 中会阻止以提升权限运行的 Visual Studio,因为 UIPI 可能静默丢弃输入。
  • 原生 ARM64 验证需要 Reactor 提供 ARM64 的 nupkg;Phase 1 的打包面向 x64/amd64。
  • 本功能有意设定为低于指南其余部分成熟度门槛。协议、安装流程、工具窗口生命周期以及解决方案加载行为都可能变化,且不提供兼容性保证。

故障排查

参见 VSIX README 的故障排查章节

Phase 2 路线图

计划中的后续工作包括:Tools → Options 选项页、更完善的解决方案加载行为、可选的市场分发、扩展的 ARM64/签名验证、把响应式引用关系图叠加层(目前由 VS Code 预览和 references devtools 工具提供)呈现在内嵌工具窗口内,以及足够的沉淀期以决定该 VSIX 是否可以摆脱「粗糙实验」的阶段。