# Flyshot 跨平台混淆发布 Implementation Plan > **For agentic workers:** REQUIRED SUB-SKILL: Use superpowers:subagent-driven-development (recommended) or superpowers:executing-plans to implement this plan task-by-task. Steps use checkbox (`- [ ]`) syntax for tracking. **Goal:** 为全部 `Flyshot.*` 自研程序集建立依赖环境 Obfuscar 的跨平台框架依赖混淆发布流程。 **Architecture:** 使用一个 PowerShell 入口编排 `dotnet publish`、绝对路径 Obfuscar XML 生成、混淆执行、产物完整性检查和映射文件隔离。发布脚本不修改项目运行时代码,也不引入混淆器包依赖。 **Tech Stack:** PowerShell 7、.NET 8 SDK、Obfuscar.GlobalTool 2.2.50、ASP.NET Core 自包含发布。 --- ### Task 1: 发布脚本契约测试 **Files:** - Create: `tests/Publishing/Publish-Obfuscated.Tests.ps1` - [ ] 编写测试夹具,创建包含八个 `Flyshot.*.dll` 和一个第三方 DLL 的临时发布目录。 - [ ] 调用尚不存在的配置生成入口,断言测试因缺少 `scripts/Publish-Obfuscated.ps1` 而失败。 - [ ] 保留测试入口,使后续实现可以在 `-GenerateConfigOnly` 模式下验证配置内容而不执行真实发布。 ### Task 2: 双平台混淆发布脚本 **Files:** - Create: `scripts/Publish-Obfuscated.ps1` - [ ] 定义带完整注释的参数、静态程序集清单和辅助函数。 - [ ] 检查 PowerShell、`dotnet` 与 `obfuscar.console` 环境命令。 - [ ] 使用 `dotnet publish -c Release -r --self-contained true -p:PublishSingleFile=false` 生成原始产物。 - [ ] 为八个 `Flyshot.*.dll` 生成使用绝对路径的 Obfuscar XML。 - [ ] 执行 Obfuscar,并检查每个输入模块都有混淆输出。 - [ ] 将混淆 DLL/PDB 替换进发布目录,并将 `Mapping.txt` 隔离到 `outputs/obfuscation-maps//`。 - [ ] 不传 RID,生成一份 Windows/Linux 共用的 .NET 8 框架依赖发布包。 ### Task 3: 发布任务与文档 **Files:** - Modify: `.vscode/tasks.json` - Modify: `README.md` - [ ] 将 VS Code `publish` 任务改为调用 PowerShell 混淆发布脚本。 - [ ] 在 README 发布章节记录环境安装、发布命令、输出目录和保护边界。 ### Task 4: 验证 **Files:** - Modify: `docs/superpowers/plans/2026-06-22-cross-platform-obfuscation.md` - [ ] 运行脚本契约测试并确认通过。 - [ ] 运行 `dotnet test FlyshotReplacement.sln -c Release -v minimal`。 - [ ] 运行 `dotnet build FlyshotReplacement.sln -c Release --no-restore -v minimal`。 - [ ] 环境安装 Obfuscar 后执行 `pwsh -File scripts/Publish-Obfuscated.ps1`。 - [ ] 启动 Windows 混淆产物并请求 `/healthz`。 - [ ] 检查 Linux 混淆产物结构;存在 WSL 时启动并请求 `/healthz`。 - [ ] 检查 `git diff`,确认没有第三方程序集或映射文件进入部署包。