构建与本地运行
以下命令面向包含完整 src-winui 实现的桌面开发检出,不适用于只有官网代码的仓库。请先确认所在分支包含 Native Host、WinUI Core 和共享 Web 入口。
开发环境
当前项目文件指定 .NET 10、Windows SDK 10.0.26100、x64 与 Windows App SDK 1.8。这是本次源码的构建配置,不是已经验收的最终最低系统要求。
还需要 Node.js/npm、Rust 的 Windows 编译环境,以及 C++/Windows SDK 构建依赖。共享沉浸与胶囊需要 WebView2。依赖版本以检出中的项目文件与锁文件为准。
生成共享 Web 资源
在桌面仓库根目录执行:
npm ci
pwsh -NoProfile -File scripts/build-winui-web.ps1 -RepoRoot (Get-Location).Path
脚本会运行类型检查和 Vite 构建,从 manifest 收集 immersive.html 与 lyric-capsule.html 的依赖,写入 WinUI 的 Assets/web 并生成构建戳记。不要用旧 dist 目录手工覆盖这些资源。
构建宿主与原生界面
cargo build --manifest-path src-tauri/Cargo.toml --bin ofplayer-native-host
dotnet build src-winui/OFPlayer.WinUI/OFPlayer.WinUI.csproj -p:Platform=x64
Web 构建、Rust 宿主构建与 WinUI 构建是三个环节;其中一个通过不能替代另外两个。
使用独立数据目录运行
下面的示例将预览数据放在当前检出下的 .preview-data,避免混用已有正式曲库:
$env:OFPLAYER_WINUI_DATA_ROOT = Join-Path (Get-Location) '.preview-data'
$env:OFPLAYER_NATIVE_HOST_PATH = Join-Path (Get-Location) 'src-tauri/target/debug/ofplayer-native-host.exe'
& './src-winui/OFPlayer.WinUI/bin/x64/Debug/net10.0-windows10.0.26100.0/win-x64/OFPlayer.WinUI.exe'
未配置数据目录时,当前实现默认使用本地应用数据目录下的 ofplayer-winui-preview。以应用 设置 → 曲库与存储 → 数据位置与重置显示的实际位置为准。
同一个数据目录不可被两个宿主同时占用。不要让旧 Tauri 客户端与 WinUI 共写同一份数据库,也不要绕过正式目录保护来完成普通预览。
验证层次
dotnet run --project src-winui/OFPlayer.WinUI.Core.Tests/OFPlayer.WinUI.Core.Tests.csproj
cargo test --manifest-path src-tauri/Cargo.toml --test native_host_protocol
Core 测试验证模型和策略;协议测试启动真实宿主验证进程通信。最后仍需在原生窗口中检查导入、播放、分组返回、沉浸、胶囊和设备行为。浏览器中的 Vue 页面不能证明 XAML 焦点、窗口拖动、系统媒体控制正常。
发布前再检查
当前 publish 配置会在可用时复制 release 原生宿主和应用 PRI 资源。发布目录需要完整资源、宿主及运行依赖,不能只拷贝一个 exe。干净机器安装、签名、升级、数据保留和更新失败恢复是独立的发布验收。