用途:当来自 Visual Studio 或 VS Code 的 Razor 格式化问题反馈带有格式化日志 zip(如 Azure DevOps 工作项、Developer Community 工单或 GitHub issue 中的附件)时,用本技能把日志导入测试套件进行复现与调查。
主要能力:定位并导入日志包;将包内所有文件复制到 src\Razor\src\Razor\test\Microsoft.VisualStudio.LanguageServices.Razor.UnitTests\TestFiles\FormattingLog<TestName>\,并在 src\Razor\src\Razor\test\Microsoft.VisualStudio.LanguageServices.Razor.UnitTests\Cohost\Formatting\FormattingLogTest.cs 添加对应的 [Fact];运行导入的测试;通过则报告日志所记录的问题已不再复现,失败则先保留导入的复现,再缩为最小 DocumentFormattingTest 并修复产品代码。
使用方式:先取得日志包本地绝对路径。Azure DevOps 或 Developer Community 的私有附件无法由工具可靠下载,需请用户先下载 Full_razor.zip 或 Range_razor.zip 并提供本地路径;GitHub issue 若附件可直接下载则下载到临时目录,否则同样请用户提供。然后运行辅助脚本:..github\skills\formatting-log\scripts\Import-FormattingLog.ps1 -ZipPath C:\Users\dawengie\Downloads\Range_Index_razor.zip -WorkItemUrl https://dev.azure.com/devdiv/DevDiv/_workitems/edit/2878103 -TestName RanOutOfOriginalLines。其中 -ZipPath 必须是本地文件路径;-TestName 默认由 zip 文件名生成,可覆盖,且文件夹名须与测试名一致;仅当预期结果应为所有编辑被过滤掉时才用 -Expectation Null,默认 NotNull。之后运行:dotnet test src\Razor\src\Razor\test\Microsoft.VisualStudio.LanguageServices.Razor.UnitTests\Microsoft.VisualStudio.LanguageServices.Razor.UnitTests.csproj --filter "FullyQualifiedName~FormattingLogTest.<TestName>",不要在仓库根目录运行 dotnet test。
失败后的流程:先单独提交导入的日志资源与 FormattingLogTest.cs 改动;再在 src\Razor\src\Razor\test\Microsoft.CodeAnalysis.Razor.CohostingShared.UnitTests\Formatting\DocumentFormattingTest.cs 中缩小为聚焦复现并单独提交;最后修复产品代码并单独提交;重新运行导入的 FormattingLogTest 与聚焦的 DocumentFormattingTest。三者应保持为独立提交。
限制与注意:若用户只给出工单 URL,应停下并请其先下载 zip;FormattingLogTest 同时接受真实 range 载荷与全文档日志中的字面 null Range.json;导入的 zip 常含比测试当前消费更多的文件,应全部保留在测试资源文件夹;建议给导入的测试加上带来源 Azure DevOps 或 GitHub URL 的 [WorkItem("...")]。