[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-dotnet-mtp-hot-reload":3,"mdc--a4cft8-key":37,"related-org-dotnet-mtp-hot-reload":1189,"related-repo-dotnet-mtp-hot-reload":1350},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":25,"repoUrl":26,"updatedAt":27,"license":28,"forks":29,"topics":30,"repo":32,"sourceUrl":35,"mdContent":36},"mtp-hot-reload","iterate on test fixes with hot reload","Suggests using Microsoft Testing Platform (MTP) hot reload to iterate fixes on failing tests without rebuilding. Use when user says \"hot reload tests\", \"iterate on test fix\", \"run tests without rebuilding\", \"speed up test loop\", \"fix test faster\", or needs to set up MTP hot reload to rapidly iterate on test failures. Covers setup (NuGet package, environment variable, launchSettings.json) and the iterative workflow for fixing tests. DO NOT USE FOR: writing test code, diagnosing test failures, running tests normally with dotnet test (use run-tests), applying test filters, producing TRX reports, CI\u002FCD pipeline configuration, or Visual Studio Test Explorer hot reload (which is a different feature).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},"dotnet",".NET (Microsoft)","https:\u002F\u002Fpexgzepcugksgbtrxkhf.supabase.co\u002Fstorage\u002Fv1\u002Fobject\u002Fpublic\u002Forg-logos\u002Fdotnet.png",[12,16,19,22],{"name":13,"slug":14,"type":15},".NET","net","tag",{"name":17,"slug":18,"type":15},"Engineering","engineering",{"name":20,"slug":21,"type":15},"Testing","testing",{"name":23,"slug":24,"type":15},"Debugging","debugging",4576,"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fskills","2026-07-12T08:23:53.802923","MIT",332,[31],"agent-skills",{"repoUrl":26,"stars":25,"forks":29,"topics":33,"description":34},[31],"Repository for skills to assist AI coding agents with .NET and C#","https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fskills\u002Ftree\u002FHEAD\u002Fplugins\u002Fdotnet-test\u002Fskills\u002Fmtp-hot-reload","---\nname: mtp-hot-reload\ndescription: >\n  Suggests using Microsoft Testing Platform (MTP) hot reload to iterate fixes\n  on failing tests without rebuilding. Use when user says \"hot reload tests\",\n  \"iterate on test fix\", \"run tests without rebuilding\", \"speed up test loop\",\n  \"fix test faster\", or needs to set up MTP hot reload to rapidly iterate on\n  test failures. Covers setup (NuGet package, environment variable,\n  launchSettings.json) and the iterative workflow for fixing tests.\n  DO NOT USE FOR: writing test code, diagnosing test failures, running tests\n  normally with dotnet test (use run-tests), applying test filters, producing\n  TRX reports, CI\u002FCD pipeline configuration, or Visual Studio Test Explorer\n  hot reload (which is a different feature).\nlicense: MIT\n---\n\n# MTP Hot Reload for Iterative Test Fixing\n\nSet up and use Microsoft Testing Platform hot reload to rapidly iterate fixes on failing tests without rebuilding between each change.\n\n## When to Use\n\n- User has one or more failing tests and wants to iterate fixes quickly\n- User wants to avoid rebuild overhead while fixing test code or production code\n- User asks about hot reload for tests or speeding up the test-fix loop\n- User needs to set up MTP hot reload in their project\n\n## When Not to Use\n\n- User needs to write new tests from scratch (use general coding assistance)\n- User needs to diagnose why a test is failing (use diagnostic skills)\n- User wants Visual Studio Test Explorer hot reload (different feature, built into VS)\n- Project uses VSTest -- hot reload requires Microsoft Testing Platform (MTP)\n- User needs CI\u002FCD pipeline configuration\n\n## Inputs\n\n| Input | Required | Description |\n|-------|----------|-------------|\n| Test project path | No | Path to the test project (.csproj). Defaults to current directory. |\n| Failing test name or filter | No | Specific test(s) to iterate on |\n\n## Workflow\n\n### Step 1: Verify the project uses Microsoft Testing Platform\n\nHot reload requires MTP. It does **not** work with VSTest.\n\nFollow the detection procedure in the `platform-detection` skill to determine the test platform.\n\nIf the project uses VSTest, inform the user that MTP hot reload is not available and suggest migrating to MTP first (see `migrate-vstest-to-mtp`), or using Visual Studio's built-in Test Explorer hot reload feature instead.\n\n### Step 2: Add the hot reload NuGet package\n\nInstall the `Microsoft.Testing.Extensions.HotReload` package:\n\n```shell\ndotnet add \u003Cproject-path> package Microsoft.Testing.Extensions.HotReload\n```\n\n> **Note**: When using `Microsoft.Testing.Platform.MSBuild` (included transitively by MSTest, NUnit, and xUnit runners), the extension is auto-registered when you install its NuGet package -- no code changes needed.\n\n### Step 3: Enable hot reload\n\nHot reload is activated by setting the `TESTINGPLATFORM_HOTRELOAD_ENABLED` environment variable to `1`.\n\n**Option A -- Set it in the shell before running tests:**\n\n```shell\n# PowerShell\n$env:TESTINGPLATFORM_HOTRELOAD_ENABLED = \"1\"\n\n# bash\u002Fzsh\nexport TESTINGPLATFORM_HOTRELOAD_ENABLED=1\n```\n\n**Option B -- Add it to `launchSettings.json` (recommended for repeatable use):**\n\nCreate or update `Properties\u002FlaunchSettings.json` in the test project:\n\n```json\n{\n  \"profiles\": {\n    \"\u003CProjectName>\": {\n      \"commandName\": \"Project\",\n      \"environmentVariables\": {\n        \"TESTINGPLATFORM_HOTRELOAD_ENABLED\": \"1\"\n      }\n    }\n  }\n}\n```\n\n### Step 4: Run the tests with hot reload\n\nRun the test project directly (not through `dotnet test`) to use hot reload in console mode:\n\n```shell\ndotnet run --project \u003Cproject-path>\n```\n\nTo filter to specific failing tests, pass the filter after `--`. The syntax depends on the test framework -- see the `filter-syntax` skill for full details. Quick examples:\n\n| Framework | Filter syntax |\n|-----------|--------------|\n| MSTest | `dotnet run --project \u003Cpath> -- --filter \"FullyQualifiedName~TestMethodName\"` |\n| NUnit | `dotnet run --project \u003Cpath> -- --filter \"FullyQualifiedName~TestMethodName\"` |\n| xUnit v3 | `dotnet run --project \u003Cpath> -- --filter-method \"*TestMethodName\"` |\n| TUnit | `dotnet run --project \u003Cpath> -- --treenode-filter \"\u002F*\u002F*\u002FClassName\u002FTestMethodName\"` |\n\nThe test host will start, run the tests, and **remain running** waiting for code changes.\n\n### Step 5: Iterate on the fix\n\n1. Edit the source code (test code or production code) in your editor\n2. The test host detects the changes and re-runs the affected tests automatically\n3. Review the updated results in the console\n4. Repeat until all targeted tests pass\n\n> **Important**: Hot reload currently works in **console mode only**. There is no support for hot reload in Test Explorer for Visual Studio or Visual Studio Code.\n\n### Step 6: Finalize\n\nOnce all tests pass:\n\n1. Stop the test host (Ctrl+C)\n2. Run a full `dotnet test` to confirm all tests pass with a clean build\n3. Optionally remove `TESTINGPLATFORM_HOTRELOAD_ENABLED` from the environment or keep `launchSettings.json` for future use\n\n## Validation\n\n- [ ] Project uses Microsoft Testing Platform (not VSTest)\n- [ ] `Microsoft.Testing.Extensions.HotReload` package is installed\n- [ ] `TESTINGPLATFORM_HOTRELOAD_ENABLED` environment variable is set to `1`\n- [ ] Tests run and the host remains active waiting for changes\n- [ ] Code changes are picked up without manual restart\n\n## Common Pitfalls\n\n| Pitfall | Solution |\n|---------|----------|\n| Using `dotnet test` instead of `dotnet run` | Hot reload requires `dotnet run --project \u003Cpath>` to run the test host directly in console mode |\n| Project uses VSTest, not MTP | Hot reload requires MTP. Migrate to MTP first or use VS Test Explorer hot reload |\n| Forgetting to set the environment variable | Set `TESTINGPLATFORM_HOTRELOAD_ENABLED=1` before running |\n| Expecting Test Explorer integration | Console mode only -- no VS\u002FVS Code Test Explorer support |\n| Making unsupported code changes (rude edits) | Some changes (adding new types, changing method signatures) require a restart. Stop and re-run |\n",{"data":38,"body":39},{"name":4,"description":6,"license":28},{"type":40,"children":41},"root",[42,51,57,64,89,95,123,129,197,203,210,223,237,250,256,269,329,351,357,378,386,470,486,499,702,708,721,762,783,872,884,890,914,934,940,945,984,990,1061,1067,1183],{"type":43,"tag":44,"props":45,"children":47},"element","h1",{"id":46},"mtp-hot-reload-for-iterative-test-fixing",[48],{"type":49,"value":50},"text","MTP Hot Reload for Iterative Test Fixing",{"type":43,"tag":52,"props":53,"children":54},"p",{},[55],{"type":49,"value":56},"Set up and use Microsoft Testing Platform hot reload to rapidly iterate fixes on failing tests without rebuilding between each change.",{"type":43,"tag":58,"props":59,"children":61},"h2",{"id":60},"when-to-use",[62],{"type":49,"value":63},"When to Use",{"type":43,"tag":65,"props":66,"children":67},"ul",{},[68,74,79,84],{"type":43,"tag":69,"props":70,"children":71},"li",{},[72],{"type":49,"value":73},"User has one or more failing tests and wants to iterate fixes quickly",{"type":43,"tag":69,"props":75,"children":76},{},[77],{"type":49,"value":78},"User wants to avoid rebuild overhead while fixing test code or production code",{"type":43,"tag":69,"props":80,"children":81},{},[82],{"type":49,"value":83},"User asks about hot reload for tests or speeding up the test-fix loop",{"type":43,"tag":69,"props":85,"children":86},{},[87],{"type":49,"value":88},"User needs to set up MTP hot reload in their project",{"type":43,"tag":58,"props":90,"children":92},{"id":91},"when-not-to-use",[93],{"type":49,"value":94},"When Not to Use",{"type":43,"tag":65,"props":96,"children":97},{},[98,103,108,113,118],{"type":43,"tag":69,"props":99,"children":100},{},[101],{"type":49,"value":102},"User needs to write new tests from scratch (use general coding assistance)",{"type":43,"tag":69,"props":104,"children":105},{},[106],{"type":49,"value":107},"User needs to diagnose why a test is failing (use diagnostic skills)",{"type":43,"tag":69,"props":109,"children":110},{},[111],{"type":49,"value":112},"User wants Visual Studio Test Explorer hot reload (different feature, built into VS)",{"type":43,"tag":69,"props":114,"children":115},{},[116],{"type":49,"value":117},"Project uses VSTest -- hot reload requires Microsoft Testing Platform (MTP)",{"type":43,"tag":69,"props":119,"children":120},{},[121],{"type":49,"value":122},"User needs CI\u002FCD pipeline configuration",{"type":43,"tag":58,"props":124,"children":126},{"id":125},"inputs",[127],{"type":49,"value":128},"Inputs",{"type":43,"tag":130,"props":131,"children":132},"table",{},[133,157],{"type":43,"tag":134,"props":135,"children":136},"thead",{},[137],{"type":43,"tag":138,"props":139,"children":140},"tr",{},[141,147,152],{"type":43,"tag":142,"props":143,"children":144},"th",{},[145],{"type":49,"value":146},"Input",{"type":43,"tag":142,"props":148,"children":149},{},[150],{"type":49,"value":151},"Required",{"type":43,"tag":142,"props":153,"children":154},{},[155],{"type":49,"value":156},"Description",{"type":43,"tag":158,"props":159,"children":160},"tbody",{},[161,180],{"type":43,"tag":138,"props":162,"children":163},{},[164,170,175],{"type":43,"tag":165,"props":166,"children":167},"td",{},[168],{"type":49,"value":169},"Test project path",{"type":43,"tag":165,"props":171,"children":172},{},[173],{"type":49,"value":174},"No",{"type":43,"tag":165,"props":176,"children":177},{},[178],{"type":49,"value":179},"Path to the test project (.csproj). Defaults to current directory.",{"type":43,"tag":138,"props":181,"children":182},{},[183,188,192],{"type":43,"tag":165,"props":184,"children":185},{},[186],{"type":49,"value":187},"Failing test name or filter",{"type":43,"tag":165,"props":189,"children":190},{},[191],{"type":49,"value":174},{"type":43,"tag":165,"props":193,"children":194},{},[195],{"type":49,"value":196},"Specific test(s) to iterate on",{"type":43,"tag":58,"props":198,"children":200},{"id":199},"workflow",[201],{"type":49,"value":202},"Workflow",{"type":43,"tag":204,"props":205,"children":207},"h3",{"id":206},"step-1-verify-the-project-uses-microsoft-testing-platform",[208],{"type":49,"value":209},"Step 1: Verify the project uses Microsoft Testing Platform",{"type":43,"tag":52,"props":211,"children":212},{},[213,215,221],{"type":49,"value":214},"Hot reload requires MTP. It does ",{"type":43,"tag":216,"props":217,"children":218},"strong",{},[219],{"type":49,"value":220},"not",{"type":49,"value":222}," work with VSTest.",{"type":43,"tag":52,"props":224,"children":225},{},[226,228,235],{"type":49,"value":227},"Follow the detection procedure in the ",{"type":43,"tag":229,"props":230,"children":232},"code",{"className":231},[],[233],{"type":49,"value":234},"platform-detection",{"type":49,"value":236}," skill to determine the test platform.",{"type":43,"tag":52,"props":238,"children":239},{},[240,242,248],{"type":49,"value":241},"If the project uses VSTest, inform the user that MTP hot reload is not available and suggest migrating to MTP first (see ",{"type":43,"tag":229,"props":243,"children":245},{"className":244},[],[246],{"type":49,"value":247},"migrate-vstest-to-mtp",{"type":49,"value":249},"), or using Visual Studio's built-in Test Explorer hot reload feature instead.",{"type":43,"tag":204,"props":251,"children":253},{"id":252},"step-2-add-the-hot-reload-nuget-package",[254],{"type":49,"value":255},"Step 2: Add the hot reload NuGet package",{"type":43,"tag":52,"props":257,"children":258},{},[259,261,267],{"type":49,"value":260},"Install the ",{"type":43,"tag":229,"props":262,"children":264},{"className":263},[],[265],{"type":49,"value":266},"Microsoft.Testing.Extensions.HotReload",{"type":49,"value":268}," package:",{"type":43,"tag":270,"props":271,"children":276},"pre",{"className":272,"code":273,"language":274,"meta":275,"style":275},"language-shell shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dotnet add \u003Cproject-path> package Microsoft.Testing.Extensions.HotReload\n","shell","",[277],{"type":43,"tag":229,"props":278,"children":279},{"__ignoreMap":275},[280],{"type":43,"tag":281,"props":282,"children":285},"span",{"class":283,"line":284},"line",1,[286,291,297,303,308,314,319,324],{"type":43,"tag":281,"props":287,"children":289},{"style":288},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[290],{"type":49,"value":8},{"type":43,"tag":281,"props":292,"children":294},{"style":293},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[295],{"type":49,"value":296}," add",{"type":43,"tag":281,"props":298,"children":300},{"style":299},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[301],{"type":49,"value":302}," \u003C",{"type":43,"tag":281,"props":304,"children":305},{"style":293},[306],{"type":49,"value":307},"project-pat",{"type":43,"tag":281,"props":309,"children":311},{"style":310},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[312],{"type":49,"value":313},"h",{"type":43,"tag":281,"props":315,"children":316},{"style":299},[317],{"type":49,"value":318},">",{"type":43,"tag":281,"props":320,"children":321},{"style":293},[322],{"type":49,"value":323}," package",{"type":43,"tag":281,"props":325,"children":326},{"style":293},[327],{"type":49,"value":328}," Microsoft.Testing.Extensions.HotReload\n",{"type":43,"tag":330,"props":331,"children":332},"blockquote",{},[333],{"type":43,"tag":52,"props":334,"children":335},{},[336,341,343,349],{"type":43,"tag":216,"props":337,"children":338},{},[339],{"type":49,"value":340},"Note",{"type":49,"value":342},": When using ",{"type":43,"tag":229,"props":344,"children":346},{"className":345},[],[347],{"type":49,"value":348},"Microsoft.Testing.Platform.MSBuild",{"type":49,"value":350}," (included transitively by MSTest, NUnit, and xUnit runners), the extension is auto-registered when you install its NuGet package -- no code changes needed.",{"type":43,"tag":204,"props":352,"children":354},{"id":353},"step-3-enable-hot-reload",[355],{"type":49,"value":356},"Step 3: Enable hot reload",{"type":43,"tag":52,"props":358,"children":359},{},[360,362,368,370,376],{"type":49,"value":361},"Hot reload is activated by setting the ",{"type":43,"tag":229,"props":363,"children":365},{"className":364},[],[366],{"type":49,"value":367},"TESTINGPLATFORM_HOTRELOAD_ENABLED",{"type":49,"value":369}," environment variable to ",{"type":43,"tag":229,"props":371,"children":373},{"className":372},[],[374],{"type":49,"value":375},"1",{"type":49,"value":377},".",{"type":43,"tag":52,"props":379,"children":380},{},[381],{"type":43,"tag":216,"props":382,"children":383},{},[384],{"type":49,"value":385},"Option A -- Set it in the shell before running tests:",{"type":43,"tag":270,"props":387,"children":389},{"className":272,"code":388,"language":274,"meta":275,"style":275},"# PowerShell\n$env:TESTINGPLATFORM_HOTRELOAD_ENABLED = \"1\"\n\n# bash\u002Fzsh\nexport TESTINGPLATFORM_HOTRELOAD_ENABLED=1\n",[390],{"type":43,"tag":229,"props":391,"children":392},{"__ignoreMap":275},[393,402,425,435,444],{"type":43,"tag":281,"props":394,"children":395},{"class":283,"line":284},[396],{"type":43,"tag":281,"props":397,"children":399},{"style":398},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[400],{"type":49,"value":401},"# PowerShell\n",{"type":43,"tag":281,"props":403,"children":405},{"class":283,"line":404},2,[406,411,416,420],{"type":43,"tag":281,"props":407,"children":408},{"style":310},[409],{"type":49,"value":410},"$env:TESTINGPLATFORM_HOTRELOAD_ENABLED = ",{"type":43,"tag":281,"props":412,"children":413},{"style":299},[414],{"type":49,"value":415},"\"",{"type":43,"tag":281,"props":417,"children":418},{"style":293},[419],{"type":49,"value":375},{"type":43,"tag":281,"props":421,"children":422},{"style":299},[423],{"type":49,"value":424},"\"\n",{"type":43,"tag":281,"props":426,"children":428},{"class":283,"line":427},3,[429],{"type":43,"tag":281,"props":430,"children":432},{"emptyLinePlaceholder":431},true,[433],{"type":49,"value":434},"\n",{"type":43,"tag":281,"props":436,"children":438},{"class":283,"line":437},4,[439],{"type":43,"tag":281,"props":440,"children":441},{"style":398},[442],{"type":49,"value":443},"# bash\u002Fzsh\n",{"type":43,"tag":281,"props":445,"children":447},{"class":283,"line":446},5,[448,454,459,464],{"type":43,"tag":281,"props":449,"children":451},{"style":450},"--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA",[452],{"type":49,"value":453},"export",{"type":43,"tag":281,"props":455,"children":456},{"style":310},[457],{"type":49,"value":458}," TESTINGPLATFORM_HOTRELOAD_ENABLED",{"type":43,"tag":281,"props":460,"children":461},{"style":299},[462],{"type":49,"value":463},"=",{"type":43,"tag":281,"props":465,"children":467},{"style":466},"--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C",[468],{"type":49,"value":469},"1\n",{"type":43,"tag":52,"props":471,"children":472},{},[473],{"type":43,"tag":216,"props":474,"children":475},{},[476,478,484],{"type":49,"value":477},"Option B -- Add it to ",{"type":43,"tag":229,"props":479,"children":481},{"className":480},[],[482],{"type":49,"value":483},"launchSettings.json",{"type":49,"value":485}," (recommended for repeatable use):",{"type":43,"tag":52,"props":487,"children":488},{},[489,491,497],{"type":49,"value":490},"Create or update ",{"type":43,"tag":229,"props":492,"children":494},{"className":493},[],[495],{"type":49,"value":496},"Properties\u002FlaunchSettings.json",{"type":49,"value":498}," in the test project:",{"type":43,"tag":270,"props":500,"children":504},{"className":501,"code":502,"language":503,"meta":275,"style":275},"language-json shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","{\n  \"profiles\": {\n    \"\u003CProjectName>\": {\n      \"commandName\": \"Project\",\n      \"environmentVariables\": {\n        \"TESTINGPLATFORM_HOTRELOAD_ENABLED\": \"1\"\n      }\n    }\n  }\n}\n","json",[505],{"type":43,"tag":229,"props":506,"children":507},{"__ignoreMap":275},[508,516,543,568,608,632,666,675,684,693],{"type":43,"tag":281,"props":509,"children":510},{"class":283,"line":284},[511],{"type":43,"tag":281,"props":512,"children":513},{"style":299},[514],{"type":49,"value":515},"{\n",{"type":43,"tag":281,"props":517,"children":518},{"class":283,"line":404},[519,524,529,533,538],{"type":43,"tag":281,"props":520,"children":521},{"style":299},[522],{"type":49,"value":523},"  \"",{"type":43,"tag":281,"props":525,"children":526},{"style":450},[527],{"type":49,"value":528},"profiles",{"type":43,"tag":281,"props":530,"children":531},{"style":299},[532],{"type":49,"value":415},{"type":43,"tag":281,"props":534,"children":535},{"style":299},[536],{"type":49,"value":537},":",{"type":43,"tag":281,"props":539,"children":540},{"style":299},[541],{"type":49,"value":542}," {\n",{"type":43,"tag":281,"props":544,"children":545},{"class":283,"line":427},[546,551,556,560,564],{"type":43,"tag":281,"props":547,"children":548},{"style":299},[549],{"type":49,"value":550},"    \"",{"type":43,"tag":281,"props":552,"children":553},{"style":288},[554],{"type":49,"value":555},"\u003CProjectName>",{"type":43,"tag":281,"props":557,"children":558},{"style":299},[559],{"type":49,"value":415},{"type":43,"tag":281,"props":561,"children":562},{"style":299},[563],{"type":49,"value":537},{"type":43,"tag":281,"props":565,"children":566},{"style":299},[567],{"type":49,"value":542},{"type":43,"tag":281,"props":569,"children":570},{"class":283,"line":437},[571,576,581,585,589,594,599,603],{"type":43,"tag":281,"props":572,"children":573},{"style":299},[574],{"type":49,"value":575},"      \"",{"type":43,"tag":281,"props":577,"children":578},{"style":466},[579],{"type":49,"value":580},"commandName",{"type":43,"tag":281,"props":582,"children":583},{"style":299},[584],{"type":49,"value":415},{"type":43,"tag":281,"props":586,"children":587},{"style":299},[588],{"type":49,"value":537},{"type":43,"tag":281,"props":590,"children":591},{"style":299},[592],{"type":49,"value":593}," \"",{"type":43,"tag":281,"props":595,"children":596},{"style":293},[597],{"type":49,"value":598},"Project",{"type":43,"tag":281,"props":600,"children":601},{"style":299},[602],{"type":49,"value":415},{"type":43,"tag":281,"props":604,"children":605},{"style":299},[606],{"type":49,"value":607},",\n",{"type":43,"tag":281,"props":609,"children":610},{"class":283,"line":446},[611,615,620,624,628],{"type":43,"tag":281,"props":612,"children":613},{"style":299},[614],{"type":49,"value":575},{"type":43,"tag":281,"props":616,"children":617},{"style":466},[618],{"type":49,"value":619},"environmentVariables",{"type":43,"tag":281,"props":621,"children":622},{"style":299},[623],{"type":49,"value":415},{"type":43,"tag":281,"props":625,"children":626},{"style":299},[627],{"type":49,"value":537},{"type":43,"tag":281,"props":629,"children":630},{"style":299},[631],{"type":49,"value":542},{"type":43,"tag":281,"props":633,"children":635},{"class":283,"line":634},6,[636,641,646,650,654,658,662],{"type":43,"tag":281,"props":637,"children":638},{"style":299},[639],{"type":49,"value":640},"        \"",{"type":43,"tag":281,"props":642,"children":644},{"style":643},"--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178",[645],{"type":49,"value":367},{"type":43,"tag":281,"props":647,"children":648},{"style":299},[649],{"type":49,"value":415},{"type":43,"tag":281,"props":651,"children":652},{"style":299},[653],{"type":49,"value":537},{"type":43,"tag":281,"props":655,"children":656},{"style":299},[657],{"type":49,"value":593},{"type":43,"tag":281,"props":659,"children":660},{"style":293},[661],{"type":49,"value":375},{"type":43,"tag":281,"props":663,"children":664},{"style":299},[665],{"type":49,"value":424},{"type":43,"tag":281,"props":667,"children":669},{"class":283,"line":668},7,[670],{"type":43,"tag":281,"props":671,"children":672},{"style":299},[673],{"type":49,"value":674},"      }\n",{"type":43,"tag":281,"props":676,"children":678},{"class":283,"line":677},8,[679],{"type":43,"tag":281,"props":680,"children":681},{"style":299},[682],{"type":49,"value":683},"    }\n",{"type":43,"tag":281,"props":685,"children":687},{"class":283,"line":686},9,[688],{"type":43,"tag":281,"props":689,"children":690},{"style":299},[691],{"type":49,"value":692},"  }\n",{"type":43,"tag":281,"props":694,"children":696},{"class":283,"line":695},10,[697],{"type":43,"tag":281,"props":698,"children":699},{"style":299},[700],{"type":49,"value":701},"}\n",{"type":43,"tag":204,"props":703,"children":705},{"id":704},"step-4-run-the-tests-with-hot-reload",[706],{"type":49,"value":707},"Step 4: Run the tests with hot reload",{"type":43,"tag":52,"props":709,"children":710},{},[711,713,719],{"type":49,"value":712},"Run the test project directly (not through ",{"type":43,"tag":229,"props":714,"children":716},{"className":715},[],[717],{"type":49,"value":718},"dotnet test",{"type":49,"value":720},") to use hot reload in console mode:",{"type":43,"tag":270,"props":722,"children":724},{"className":272,"code":723,"language":274,"meta":275,"style":275},"dotnet run --project \u003Cproject-path>\n",[725],{"type":43,"tag":229,"props":726,"children":727},{"__ignoreMap":275},[728],{"type":43,"tag":281,"props":729,"children":730},{"class":283,"line":284},[731,735,740,745,749,753,757],{"type":43,"tag":281,"props":732,"children":733},{"style":288},[734],{"type":49,"value":8},{"type":43,"tag":281,"props":736,"children":737},{"style":293},[738],{"type":49,"value":739}," run",{"type":43,"tag":281,"props":741,"children":742},{"style":293},[743],{"type":49,"value":744}," --project",{"type":43,"tag":281,"props":746,"children":747},{"style":299},[748],{"type":49,"value":302},{"type":43,"tag":281,"props":750,"children":751},{"style":293},[752],{"type":49,"value":307},{"type":43,"tag":281,"props":754,"children":755},{"style":310},[756],{"type":49,"value":313},{"type":43,"tag":281,"props":758,"children":759},{"style":299},[760],{"type":49,"value":761},">\n",{"type":43,"tag":52,"props":763,"children":764},{},[765,767,773,775,781],{"type":49,"value":766},"To filter to specific failing tests, pass the filter after ",{"type":43,"tag":229,"props":768,"children":770},{"className":769},[],[771],{"type":49,"value":772},"--",{"type":49,"value":774},". The syntax depends on the test framework -- see the ",{"type":43,"tag":229,"props":776,"children":778},{"className":777},[],[779],{"type":49,"value":780},"filter-syntax",{"type":49,"value":782}," skill for full details. Quick examples:",{"type":43,"tag":130,"props":784,"children":785},{},[786,802],{"type":43,"tag":134,"props":787,"children":788},{},[789],{"type":43,"tag":138,"props":790,"children":791},{},[792,797],{"type":43,"tag":142,"props":793,"children":794},{},[795],{"type":49,"value":796},"Framework",{"type":43,"tag":142,"props":798,"children":799},{},[800],{"type":49,"value":801},"Filter syntax",{"type":43,"tag":158,"props":803,"children":804},{},[805,822,838,855],{"type":43,"tag":138,"props":806,"children":807},{},[808,813],{"type":43,"tag":165,"props":809,"children":810},{},[811],{"type":49,"value":812},"MSTest",{"type":43,"tag":165,"props":814,"children":815},{},[816],{"type":43,"tag":229,"props":817,"children":819},{"className":818},[],[820],{"type":49,"value":821},"dotnet run --project \u003Cpath> -- --filter \"FullyQualifiedName~TestMethodName\"",{"type":43,"tag":138,"props":823,"children":824},{},[825,830],{"type":43,"tag":165,"props":826,"children":827},{},[828],{"type":49,"value":829},"NUnit",{"type":43,"tag":165,"props":831,"children":832},{},[833],{"type":43,"tag":229,"props":834,"children":836},{"className":835},[],[837],{"type":49,"value":821},{"type":43,"tag":138,"props":839,"children":840},{},[841,846],{"type":43,"tag":165,"props":842,"children":843},{},[844],{"type":49,"value":845},"xUnit v3",{"type":43,"tag":165,"props":847,"children":848},{},[849],{"type":43,"tag":229,"props":850,"children":852},{"className":851},[],[853],{"type":49,"value":854},"dotnet run --project \u003Cpath> -- --filter-method \"*TestMethodName\"",{"type":43,"tag":138,"props":856,"children":857},{},[858,863],{"type":43,"tag":165,"props":859,"children":860},{},[861],{"type":49,"value":862},"TUnit",{"type":43,"tag":165,"props":864,"children":865},{},[866],{"type":43,"tag":229,"props":867,"children":869},{"className":868},[],[870],{"type":49,"value":871},"dotnet run --project \u003Cpath> -- --treenode-filter \"\u002F*\u002F*\u002FClassName\u002FTestMethodName\"",{"type":43,"tag":52,"props":873,"children":874},{},[875,877,882],{"type":49,"value":876},"The test host will start, run the tests, and ",{"type":43,"tag":216,"props":878,"children":879},{},[880],{"type":49,"value":881},"remain running",{"type":49,"value":883}," waiting for code changes.",{"type":43,"tag":204,"props":885,"children":887},{"id":886},"step-5-iterate-on-the-fix",[888],{"type":49,"value":889},"Step 5: Iterate on the fix",{"type":43,"tag":891,"props":892,"children":893},"ol",{},[894,899,904,909],{"type":43,"tag":69,"props":895,"children":896},{},[897],{"type":49,"value":898},"Edit the source code (test code or production code) in your editor",{"type":43,"tag":69,"props":900,"children":901},{},[902],{"type":49,"value":903},"The test host detects the changes and re-runs the affected tests automatically",{"type":43,"tag":69,"props":905,"children":906},{},[907],{"type":49,"value":908},"Review the updated results in the console",{"type":43,"tag":69,"props":910,"children":911},{},[912],{"type":49,"value":913},"Repeat until all targeted tests pass",{"type":43,"tag":330,"props":915,"children":916},{},[917],{"type":43,"tag":52,"props":918,"children":919},{},[920,925,927,932],{"type":43,"tag":216,"props":921,"children":922},{},[923],{"type":49,"value":924},"Important",{"type":49,"value":926},": Hot reload currently works in ",{"type":43,"tag":216,"props":928,"children":929},{},[930],{"type":49,"value":931},"console mode only",{"type":49,"value":933},". There is no support for hot reload in Test Explorer for Visual Studio or Visual Studio Code.",{"type":43,"tag":204,"props":935,"children":937},{"id":936},"step-6-finalize",[938],{"type":49,"value":939},"Step 6: Finalize",{"type":43,"tag":52,"props":941,"children":942},{},[943],{"type":49,"value":944},"Once all tests pass:",{"type":43,"tag":891,"props":946,"children":947},{},[948,953,965],{"type":43,"tag":69,"props":949,"children":950},{},[951],{"type":49,"value":952},"Stop the test host (Ctrl+C)",{"type":43,"tag":69,"props":954,"children":955},{},[956,958,963],{"type":49,"value":957},"Run a full ",{"type":43,"tag":229,"props":959,"children":961},{"className":960},[],[962],{"type":49,"value":718},{"type":49,"value":964}," to confirm all tests pass with a clean build",{"type":43,"tag":69,"props":966,"children":967},{},[968,970,975,977,982],{"type":49,"value":969},"Optionally remove ",{"type":43,"tag":229,"props":971,"children":973},{"className":972},[],[974],{"type":49,"value":367},{"type":49,"value":976}," from the environment or keep ",{"type":43,"tag":229,"props":978,"children":980},{"className":979},[],[981],{"type":49,"value":483},{"type":49,"value":983}," for future use",{"type":43,"tag":58,"props":985,"children":987},{"id":986},"validation",[988],{"type":49,"value":989},"Validation",{"type":43,"tag":65,"props":991,"children":994},{"className":992},[993],"contains-task-list",[995,1007,1023,1043,1052],{"type":43,"tag":69,"props":996,"children":999},{"className":997},[998],"task-list-item",[1000,1005],{"type":43,"tag":1001,"props":1002,"children":1004},"input",{"disabled":431,"type":1003},"checkbox",[],{"type":49,"value":1006}," Project uses Microsoft Testing Platform (not VSTest)",{"type":43,"tag":69,"props":1008,"children":1010},{"className":1009},[998],[1011,1014,1016,1021],{"type":43,"tag":1001,"props":1012,"children":1013},{"disabled":431,"type":1003},[],{"type":49,"value":1015}," ",{"type":43,"tag":229,"props":1017,"children":1019},{"className":1018},[],[1020],{"type":49,"value":266},{"type":49,"value":1022}," package is installed",{"type":43,"tag":69,"props":1024,"children":1026},{"className":1025},[998],[1027,1030,1031,1036,1038],{"type":43,"tag":1001,"props":1028,"children":1029},{"disabled":431,"type":1003},[],{"type":49,"value":1015},{"type":43,"tag":229,"props":1032,"children":1034},{"className":1033},[],[1035],{"type":49,"value":367},{"type":49,"value":1037}," environment variable is set to ",{"type":43,"tag":229,"props":1039,"children":1041},{"className":1040},[],[1042],{"type":49,"value":375},{"type":43,"tag":69,"props":1044,"children":1046},{"className":1045},[998],[1047,1050],{"type":43,"tag":1001,"props":1048,"children":1049},{"disabled":431,"type":1003},[],{"type":49,"value":1051}," Tests run and the host remains active waiting for changes",{"type":43,"tag":69,"props":1053,"children":1055},{"className":1054},[998],[1056,1059],{"type":43,"tag":1001,"props":1057,"children":1058},{"disabled":431,"type":1003},[],{"type":49,"value":1060}," Code changes are picked up without manual restart",{"type":43,"tag":58,"props":1062,"children":1064},{"id":1063},"common-pitfalls",[1065],{"type":49,"value":1066},"Common Pitfalls",{"type":43,"tag":130,"props":1068,"children":1069},{},[1070,1086],{"type":43,"tag":134,"props":1071,"children":1072},{},[1073],{"type":43,"tag":138,"props":1074,"children":1075},{},[1076,1081],{"type":43,"tag":142,"props":1077,"children":1078},{},[1079],{"type":49,"value":1080},"Pitfall",{"type":43,"tag":142,"props":1082,"children":1083},{},[1084],{"type":49,"value":1085},"Solution",{"type":43,"tag":158,"props":1087,"children":1088},{},[1089,1123,1136,1157,1170],{"type":43,"tag":138,"props":1090,"children":1091},{},[1092,1110],{"type":43,"tag":165,"props":1093,"children":1094},{},[1095,1097,1102,1104],{"type":49,"value":1096},"Using ",{"type":43,"tag":229,"props":1098,"children":1100},{"className":1099},[],[1101],{"type":49,"value":718},{"type":49,"value":1103}," instead of ",{"type":43,"tag":229,"props":1105,"children":1107},{"className":1106},[],[1108],{"type":49,"value":1109},"dotnet run",{"type":43,"tag":165,"props":1111,"children":1112},{},[1113,1115,1121],{"type":49,"value":1114},"Hot reload requires ",{"type":43,"tag":229,"props":1116,"children":1118},{"className":1117},[],[1119],{"type":49,"value":1120},"dotnet run --project \u003Cpath>",{"type":49,"value":1122}," to run the test host directly in console mode",{"type":43,"tag":138,"props":1124,"children":1125},{},[1126,1131],{"type":43,"tag":165,"props":1127,"children":1128},{},[1129],{"type":49,"value":1130},"Project uses VSTest, not MTP",{"type":43,"tag":165,"props":1132,"children":1133},{},[1134],{"type":49,"value":1135},"Hot reload requires MTP. Migrate to MTP first or use VS Test Explorer hot reload",{"type":43,"tag":138,"props":1137,"children":1138},{},[1139,1144],{"type":43,"tag":165,"props":1140,"children":1141},{},[1142],{"type":49,"value":1143},"Forgetting to set the environment variable",{"type":43,"tag":165,"props":1145,"children":1146},{},[1147,1149,1155],{"type":49,"value":1148},"Set ",{"type":43,"tag":229,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":49,"value":1154},"TESTINGPLATFORM_HOTRELOAD_ENABLED=1",{"type":49,"value":1156}," before running",{"type":43,"tag":138,"props":1158,"children":1159},{},[1160,1165],{"type":43,"tag":165,"props":1161,"children":1162},{},[1163],{"type":49,"value":1164},"Expecting Test Explorer integration",{"type":43,"tag":165,"props":1166,"children":1167},{},[1168],{"type":49,"value":1169},"Console mode only -- no VS\u002FVS Code Test Explorer support",{"type":43,"tag":138,"props":1171,"children":1172},{},[1173,1178],{"type":43,"tag":165,"props":1174,"children":1175},{},[1176],{"type":49,"value":1177},"Making unsupported code changes (rude edits)",{"type":43,"tag":165,"props":1179,"children":1180},{},[1181],{"type":49,"value":1182},"Some changes (adding new types, changing method signatures) require a restart. Stop and re-run",{"type":43,"tag":1184,"props":1185,"children":1186},"style",{},[1187],{"type":49,"value":1188},"html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"items":1190,"total":1349},[1191,1205,1218,1233,1251,1263,1283,1293,1305,1315,1328,1339],{"slug":1192,"name":1192,"fn":1193,"description":1194,"org":1195,"tags":1196,"stars":1202,"repoUrl":1203,"updatedAt":1204},"multithreaded-task-migration","migrate MSBuild tasks to multithreaded mode","Guide for migrating MSBuild tasks to multithreaded mode support, including compatibility red-team review. Use this when converting tasks to thread-safe versions, implementing IMultiThreadableTask, adding TaskEnvironment support, or auditing migrations for behavioral compatibility.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1197,1198,1199],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":1200,"slug":1201,"type":15},"Performance","performance",5535,"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fmsbuild","2026-07-22T05:37:33.965588",{"slug":1206,"name":1206,"fn":1207,"description":1208,"org":1209,"tags":1210,"stars":25,"repoUrl":26,"updatedAt":1217},"analyzing-dotnet-performance","analyze .NET code for performance anti-patterns","Scans .NET code for ~50 performance anti-patterns across async, memory, strings, collections, LINQ, regex, serialization, and I\u002FO with tiered severity classification. Use when analyzing .NET code for optimization opportunities, reviewing hot paths, or auditing allocation-heavy patterns.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1211,1212,1215,1216],{"name":13,"slug":14,"type":15},{"name":1213,"slug":1214,"type":15},"Code Analysis","code-analysis",{"name":23,"slug":24,"type":15},{"name":1200,"slug":1201,"type":15},"2026-07-12T08:23:25.400375",{"slug":1219,"name":1219,"fn":1220,"description":1221,"org":1222,"tags":1223,"stars":25,"repoUrl":26,"updatedAt":1232},"android-tombstone-symbolication","symbolicate .NET runtime frames in Android tombstones","Symbolicate the .NET runtime frames in an Android tombstone file. Extracts BuildIds and PC offsets from the native backtrace, downloads debug symbols from the Microsoft symbol server, and runs llvm-symbolizer to produce function names with source file and line numbers. USE FOR triaging a .NET MAUI or Mono Android app crash from a tombstone, resolving native backtrace frames in libmonosgen-2.0.so or libcoreclr.so to .NET runtime source code, or investigating SIGABRT, SIGSEGV, or other native signals originating from the .NET runtime on Android. DO NOT USE FOR pure Java\u002FKotlin crashes, managed .NET exceptions that are already captured in logcat, or iOS crash logs. INVOKES Symbolicate-Tombstone.ps1 script, llvm-symbolizer, Microsoft symbol server.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1224,1225,1228,1229],{"name":13,"slug":14,"type":15},{"name":1226,"slug":1227,"type":15},"Android","android",{"name":23,"slug":24,"type":15},{"name":1230,"slug":1231,"type":15},"Microsoft","microsoft","2026-07-12T08:23:21.595572",{"slug":1234,"name":1234,"fn":1235,"description":1236,"org":1237,"tags":1238,"stars":25,"repoUrl":26,"updatedAt":1250},"apple-crash-symbolication","symbolicate .NET runtime frames in crash logs","Symbolicate .NET runtime frames in Apple platform .ips crash logs (iOS, tvOS, Mac Catalyst, macOS). Extracts UUIDs and addresses from the native backtrace, locates dSYM debug symbols, and runs atos to produce function names with source file and line numbers. Automatically downloads .dwarf symbols from the Microsoft symbol server using Mach-O UUIDs. USE FOR triaging a .NET MAUI or Mono app crash from an .ips file on any Apple platform, resolving native backtrace frames in libcoreclr or libmonosgen-2.0 to .NET runtime source code, retrieving .ips crash logs from a connected iOS device or iPhone, or investigating EXC_CRASH, EXC_BAD_ACCESS, SIGABRT, or SIGSEGV originating from the .NET runtime. DO NOT USE FOR pure Swift\u002FObjective-C crashes with no .NET components, or Android tombstone files. INVOKES Symbolicate-Crash.ps1 script, atos, dwarfdump, idevicecrashreport.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1239,1240,1241,1244,1247],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":1242,"slug":1243,"type":15},"iOS","ios",{"name":1245,"slug":1246,"type":15},"macOS","macos",{"name":1248,"slug":1249,"type":15},"Observability","observability","2026-07-12T08:23:20.369986",{"slug":1252,"name":1252,"fn":1253,"description":1254,"org":1255,"tags":1256,"stars":25,"repoUrl":26,"updatedAt":1262},"assertion-quality","evaluate assertion quality in test suites","Analyzes the variety and depth of assertions across test suites in any language. Use when the user asks to evaluate assertion quality, find shallow tests, identify assertion-free tests (no assertions or only trivial ones like Assert.IsNotNull \u002F toBeTruthy()), flag self-referential or tautological assertions, measure assertion diversity, or audit whether tests verify different facets of behavior. Polyglot: .NET, Python, TS\u002FJS, Java, Go, Ruby, Rust, Swift, Kotlin, PowerShell, C++. DO NOT USE FOR: writing new tests (use code-testing-agent \u002F writing-mstest-tests), mutation reasoning about whether tests would catch a bug (use test-gap-analysis), or a general severity-ranked anti-pattern audit (use test-anti-patterns), fixing or rewriting assertions, or writing, fixing, or modernizing MSTest tests, assertions, or attributes (use writing-mstest-tests).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1257,1258,1261],{"name":1213,"slug":1214,"type":15},{"name":1259,"slug":1260,"type":15},"QA","qa",{"name":20,"slug":21,"type":15},"2026-07-12T08:23:51.277743",{"slug":1264,"name":1264,"fn":1265,"description":1266,"org":1267,"tags":1268,"stars":25,"repoUrl":26,"updatedAt":1282},"author-component","create and review Blazor components","Create or review Blazor components (.razor files) with correct architecture. USE FOR: writing new Blazor components that do NOT involve JavaScript interop, implementing parameters and EventCallback, RenderFragment slots, component lifecycle (OnInitializedAsync, OnParametersSet), async patterns, IAsyncDisposable, CancellationToken, CSS isolation, code-behind. DO NOT USE FOR: creating new projects (use create-blazor-project), JavaScript interop or calling browser APIs from Blazor (use use-js-interop), forms and validation (use collect-user-input), prerendering issues (use support-prerendering), HTTP data fetching patterns (use fetch-and-send-data), coordinating state between unrelated components (use coordinate-components).\n",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1269,1270,1273,1276,1279],{"name":13,"slug":14,"type":15},{"name":1271,"slug":1272,"type":15},"Blazor","blazor",{"name":1274,"slug":1275,"type":15},"C#","csharp",{"name":1277,"slug":1278,"type":15},"UI Components","ui-components",{"name":1280,"slug":1281,"type":15},"Web Development","web-development","2026-07-15T06:03:29.216359",{"slug":1284,"name":1284,"fn":1285,"description":1286,"org":1287,"tags":1288,"stars":25,"repoUrl":26,"updatedAt":1292},"binlog-failure-analysis","analyze MSBuild binary logs","Analyze MSBuild binary logs to diagnose build failures. USE FOR: build errors that are unclear from console output, diagnosing cascading failures across multi-project builds, tracing MSBuild target execution order, and generally any MSBuild build issues. Requires an existing .binlog file. DO NOT USE FOR: generating binlogs (use binlog-generation), non-MSBuild build systems.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1289,1290,1291],{"name":1213,"slug":1214,"type":15},{"name":23,"slug":24,"type":15},{"name":1230,"slug":1231,"type":15},"2026-07-12T08:21:34.637923",{"slug":1294,"name":1294,"fn":1295,"description":1296,"org":1297,"tags":1298,"stars":25,"repoUrl":26,"updatedAt":1304},"binlog-generation","generate MSBuild binary logs for diagnostics","Generate MSBuild binary logs (binlogs) for build diagnostics and analysis. USE FOR: adding \u002Fbl:{} to any dotnet build, test, pack, publish, or restore command to capture a full build execution trace, prerequisite for binlog-failure-analysis and build-perf-diagnostics skills, enabling post-build investigation of errors or performance. Requires MSBuild 17.8+ \u002F .NET 8 SDK+ for {} placeholder; PowerShell needs -bl:{{}}. DO NOT USE FOR: non-MSBuild build systems (npm, Maven, CMake), analyzing an existing binlog (use binlog-failure-analysis instead).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1299,1302,1303],{"name":1300,"slug":1301,"type":15},"Build","build",{"name":23,"slug":24,"type":15},{"name":17,"slug":18,"type":15},"2026-07-19T05:38:19.340791",{"slug":1306,"name":1306,"fn":1307,"description":1308,"org":1309,"tags":1310,"stars":25,"repoUrl":26,"updatedAt":1314},"build-parallelism","optimize MSBuild build parallelism","Diagnose and fix under-parallelized MSBuild builds. USE WHEN a multi-project solution build is slower than expected, doesn't speed up when you add cores, pegs a single core while others idle, or you want to know why `-m` isn't helping. Note: `\u002Fmaxcpucount` default is 1 (sequential) — always pass `-m` for parallel builds. Covers finding the critical path (longest serial ProjectReference chain), graph build (`\u002Fgraph`), BuildInParallel, and solution filters (`.slnf`). DO NOT USE FOR: single-project builds, incremental issues (use incremental-build), compilation slowness inside one project (use build-perf-diagnostics), non-MSBuild build systems.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1311,1312,1313],{"name":13,"slug":14,"type":15},{"name":17,"slug":18,"type":15},{"name":1200,"slug":1201,"type":15},"2026-07-19T05:38:18.364937",{"slug":1316,"name":1316,"fn":1317,"description":1318,"org":1319,"tags":1320,"stars":25,"repoUrl":26,"updatedAt":1327},"build-perf-baseline","establish and optimize build performance baselines","Establish build performance baselines and apply systematic optimization techniques. USE FOR: diagnosing slow builds, establishing before\u002Fafter measurements (cold, warm, no-op scenarios), applying optimization strategies like MSBuild Server, static graph builds, artifacts output, and dependency graph trimming. Start here before diving into build-perf-diagnostics, incremental-build, or build-parallelism. DO NOT USE FOR: non-MSBuild build systems, detailed bottleneck analysis (use build-perf-diagnostics after baselining).",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1321,1322,1325,1326],{"name":17,"slug":18,"type":15},{"name":1323,"slug":1324,"type":15},"Monitoring","monitoring",{"name":1200,"slug":1201,"type":15},{"name":20,"slug":21,"type":15},"2026-07-12T08:21:35.865649",{"slug":1329,"name":1329,"fn":1330,"description":1331,"org":1332,"tags":1333,"stars":25,"repoUrl":26,"updatedAt":1338},"build-perf-diagnostics","diagnose MSBuild build performance bottlenecks","Diagnose MSBuild build performance bottlenecks using binary log analysis. USE FOR: identifying why builds are slow by analyzing binlog performance summaries, detecting ResolveAssemblyReference (RAR) taking >5s, Roslyn analyzers consuming >30% of Csc time, single targets dominating >50% of build time, node utilization below 80%, excessive Copy tasks, NuGet restore running every build. Covers timeline analysis, Target\u002FTask Performance Summary interpretation, and 7 common bottleneck categories. Use after build-perf-baseline has established measurements. DO NOT USE FOR: establishing initial baselines (use build-perf-baseline first), fixing incremental build issues (use incremental-build), parallelism tuning (use build-parallelism), non-MSBuild build systems.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1334,1335,1336,1337],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":17,"slug":18,"type":15},{"name":1200,"slug":1201,"type":15},"2026-07-12T08:21:40.961722",{"slug":1340,"name":1340,"fn":1341,"description":1342,"org":1343,"tags":1344,"stars":25,"repoUrl":26,"updatedAt":1348},"check-bin-obj-clash","detect MSBuild output path conflicts","Detects MSBuild projects with conflicting OutputPath or IntermediateOutputPath. USE FOR: builds failing with 'Cannot create a file when that file already exists', 'The process cannot access the file because it is being used by another process', intermittent build failures that succeed on retry, or missing\u002Foverwritten outputs in multi-project or multi-targeting builds where bin\u002Fobj (or project.assets.json) collide. Common causes: shared OutputPath, missing AppendTargetFrameworkToOutputPath, extra global properties (e.g. PublishReadyToRun), or SetTargetFramework on a ProjectReference to a single-targeting project. DO NOT USE FOR: file access errors unrelated to MSBuild (OS-level locking), single-project single-TFM builds, non-MSBuild build systems.",{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1345,1346,1347],{"name":23,"slug":24,"type":15},{"name":17,"slug":18,"type":15},{"name":1259,"slug":1260,"type":15},"2026-07-19T05:38:14.336279",144,{"items":1351,"total":1400},[1352,1359,1366,1374,1380,1388,1394],{"slug":1206,"name":1206,"fn":1207,"description":1208,"org":1353,"tags":1354,"stars":25,"repoUrl":26,"updatedAt":1217},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1355,1356,1357,1358],{"name":13,"slug":14,"type":15},{"name":1213,"slug":1214,"type":15},{"name":23,"slug":24,"type":15},{"name":1200,"slug":1201,"type":15},{"slug":1219,"name":1219,"fn":1220,"description":1221,"org":1360,"tags":1361,"stars":25,"repoUrl":26,"updatedAt":1232},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1362,1363,1364,1365],{"name":13,"slug":14,"type":15},{"name":1226,"slug":1227,"type":15},{"name":23,"slug":24,"type":15},{"name":1230,"slug":1231,"type":15},{"slug":1234,"name":1234,"fn":1235,"description":1236,"org":1367,"tags":1368,"stars":25,"repoUrl":26,"updatedAt":1250},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1369,1370,1371,1372,1373],{"name":13,"slug":14,"type":15},{"name":23,"slug":24,"type":15},{"name":1242,"slug":1243,"type":15},{"name":1245,"slug":1246,"type":15},{"name":1248,"slug":1249,"type":15},{"slug":1252,"name":1252,"fn":1253,"description":1254,"org":1375,"tags":1376,"stars":25,"repoUrl":26,"updatedAt":1262},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1377,1378,1379],{"name":1213,"slug":1214,"type":15},{"name":1259,"slug":1260,"type":15},{"name":20,"slug":21,"type":15},{"slug":1264,"name":1264,"fn":1265,"description":1266,"org":1381,"tags":1382,"stars":25,"repoUrl":26,"updatedAt":1282},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1383,1384,1385,1386,1387],{"name":13,"slug":14,"type":15},{"name":1271,"slug":1272,"type":15},{"name":1274,"slug":1275,"type":15},{"name":1277,"slug":1278,"type":15},{"name":1280,"slug":1281,"type":15},{"slug":1284,"name":1284,"fn":1285,"description":1286,"org":1389,"tags":1390,"stars":25,"repoUrl":26,"updatedAt":1292},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1391,1392,1393],{"name":1213,"slug":1214,"type":15},{"name":23,"slug":24,"type":15},{"name":1230,"slug":1231,"type":15},{"slug":1294,"name":1294,"fn":1295,"description":1296,"org":1395,"tags":1396,"stars":25,"repoUrl":26,"updatedAt":1304},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[1397,1398,1399],{"name":1300,"slug":1301,"type":15},{"name":23,"slug":24,"type":15},{"name":17,"slug":18,"type":15},96]