[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill-dotnet-run-tests":3,"mdc-6xp0ew-key":34,"related-org-dotnet-run-tests":3994,"related-repo-dotnet-run-tests":4157},{"slug":4,"name":4,"fn":5,"description":6,"org":7,"tags":11,"stars":22,"repoUrl":23,"updatedAt":24,"license":25,"forks":26,"topics":27,"repo":29,"sourceUrl":32,"mdContent":33},"run-tests","run and troubleshoot .NET tests","Recommend or run the exact `dotnet test` command. ALWAYS use when the user asks to run, filter, or troubleshoot .NET tests or wants the precise command, flags, or argument order — the right syntax depends on the test platform (VSTest vs Microsoft.Testing.Platform) and SDK version and is easy to get wrong from memory. USE FOR: running all tests or a subset (a specific class, category, or trait) via filters; a single framework in a multi-TFM project (`--framework`); TRX reports; crash or hang dumps; whether MTP args need the `--` separator (SDK 8\u002F9) or pass directly (SDK 10+); diagnosing why `dotnet test` fails or uses wrong argument syntax. Detects the platform (VSTest vs MTP) and framework (MSTest\u002FxUnit\u002FNUnit\u002FTUnit), then picks the matching command and filter flag (--filter, --filter-class, --filter-trait, --filter-query, --treenode-filter). DO NOT USE FOR: writing test code (use code-testing-agent), iterating on failing tests without rebuilding (use mtp-hot-reload), CI\u002FCD config, or debugging test logic.\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],{"name":13,"slug":14,"type":15},".NET","net","tag",{"name":17,"slug":18,"type":15},"Testing","testing",{"name":20,"slug":21,"type":15},"Debugging","debugging",4576,"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fskills","2026-07-12T08:23:35.69655","MIT",332,[28],"agent-skills",{"repoUrl":23,"stars":22,"forks":26,"topics":30,"description":31},[28],"Repository for skills to assist AI coding agents with .NET and C#","https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fskills\u002Ftree\u002FHEAD\u002Fplugins\u002Fdotnet-test\u002Fskills\u002Frun-tests","---\nname: run-tests\ndescription: >\n  Recommend or run the exact `dotnet test` command. ALWAYS use when the\n  user asks to run, filter, or troubleshoot .NET tests or wants the precise\n  command, flags, or argument order — the right syntax depends on the test\n  platform (VSTest vs Microsoft.Testing.Platform) and SDK version and is\n  easy to get wrong from memory. USE FOR: running all tests or a subset (a\n  specific class, category, or trait) via filters; a single framework in a\n  multi-TFM project (`--framework`); TRX reports; crash or hang dumps;\n  whether MTP args need the `--` separator (SDK 8\u002F9) or pass directly\n  (SDK 10+); diagnosing why `dotnet test` fails or uses wrong argument\n  syntax. Detects the platform (VSTest vs MTP) and framework\n  (MSTest\u002FxUnit\u002FNUnit\u002FTUnit), then picks the matching command and filter\n  flag (--filter, --filter-class, --filter-trait, --filter-query,\n  --treenode-filter). DO NOT USE FOR: writing test code (use\n  code-testing-agent), iterating on failing tests without rebuilding (use\n  mtp-hot-reload), CI\u002FCD config, or debugging test logic.\nlicense: MIT\n---\n\n# Run .NET Tests\n\nDetect the test platform and framework, run tests, and apply filters using `dotnet test`.\n\n## When to Use\n\n- User wants to run tests in a .NET project\n- User needs to run a subset of tests using filters\n- User needs help detecting which test platform (VSTest vs MTP) or framework is in use\n- User wants to understand the correct filter syntax for their setup\n\n## When Not to Use\n\n- User needs to write or generate test code (use `writing-mstest-tests` for MSTest, or general coding assistance for other frameworks)\n- User needs to migrate from VSTest to MTP (use `migrate-vstest-to-mtp`)\n- User wants to iterate on failing tests without rebuilding (use `mtp-hot-reload`)\n- User needs CI\u002FCD pipeline configuration (use CI-specific skills)\n- User needs to debug a test (use debugging skills)\n\n## Inputs\n\n| Input | Required | Description |\n|-------|----------|-------------|\n| Project or solution path | No | Path to the test project (.csproj) or solution (.sln, .slnf, .slnx). Defaults to current directory. |\n| Filter expression | No | Filter expression to select specific tests |\n| Target framework | No | Target framework moniker to run against (e.g., `net8.0`) |\n\n## Critical Rules — Avoid Cross-Platform Mistakes\n\nThese are the most common agent mistakes. Internalize before proceeding:\n\n| Rule | Why |\n|------|-----|\n| **Do NOT use `--logger trx`** for MTP projects | MTP uses `--report-trx` (requires the TrxReport extension package) |\n| **Do NOT use `--report-trx`** for VSTest projects | VSTest uses `--logger trx` |\n| **Do NOT use `-- --arg`** on .NET SDK 10+ | SDK 10+ passes MTP args directly: `dotnet test --project . --report-trx` |\n| **Do NOT omit `--`** on .NET SDK 8\u002F9 with MTP | SDK 8\u002F9 requires the separator: `dotnet test -- --report-trx` |\n| **Do NOT use `--filter \"ClassName=...\"`** with xUnit v3 on MTP | xUnit v3 on MTP uses `--filter-class`, `--filter-method`, `--filter-trait` |\n| **Do NOT use bare positional path** on SDK 10+ | Use `--project \u003Cpath>` or `--solution \u003Cpath>` instead |\n| **Do NOT use `--blame`** for MTP projects | MTP uses `--blame-crash` and `--blame-hang-timeout` separately (each requires its extension package) |\n| **Do NOT use `--collect \"Code Coverage\"`** for MTP | MTP uses `--coverage` (requires the CodeCoverage extension package) |\n\n## Workflow\n\n### Quick Reference\n\n| Platform | SDK | Command pattern |\n|----------|-----|----------------|\n| VSTest | Any | `dotnet test [\u003Cpath>] [--filter \u003Cexpr>] [--logger trx]` |\n| MTP | 8 or 9 | `dotnet test [\u003Cpath>] -- \u003CMTP_ARGS>` |\n| MTP | 10+ | `dotnet test --project \u003Cpath> \u003CMTP_ARGS>` |\n\n**Detection files to always check** (in order): `global.json` -> `.csproj` -> `Directory.Build.props` -> `Directory.Packages.props`\n\n**If the prompt names a subset of tests** (e.g., \"integration tests\", \"smoke tests\", a specific class, a specific TFM), plan to apply the matching filter \u002F `--framework` in [Step 3](#step-3-run-filtered-tests) — do not run the whole suite.\n\n### Step 1: Detect the test platform and framework\n\n1. Run `dotnet --version` in the project directory to determine the SDK version. This accounts for `global.json` SDK pinning.\n2. Read `global.json` — on .NET SDK 10+, `\"test\": { \"runner\": \"Microsoft.Testing.Platform\" }` is the **authoritative MTP signal**. If present, the project uses MTP and SDK 10+ syntax (no `--` separator).\n3. Read `.csproj`, `Directory.Build.props`, **and** `Directory.Packages.props` for framework packages and MTP properties. **Always check all three files** — MTP properties are frequently set in `Directory.Build.props` rather than individual `.csproj` files.\n4. For full detection logic (SDK 8\u002F9 signals, framework identification), see the `platform-detection` skill.\n\n**What to look for in each file:**\n\n| File | Look for | Indicates |\n|------|----------|-----------|\n| `global.json` | `\"test\": { \"runner\": \"Microsoft.Testing.Platform\" }` | MTP on SDK 10+ |\n| `global.json` | `\"sdk\": { \"version\": \"...\" }` | SDK version (determines `--` separator behavior) |\n| `.csproj` | `\u003CTestingPlatformDotnetTestSupport>true` | MTP on SDK 8\u002F9 |\n| `.csproj` | `MSTest`, `xunit.v3`, `NUnit`, `TUnit` packages | Framework identity |\n| `.csproj` | `Microsoft.NET.Test.Sdk` + test adapter | VSTest (unless overridden by MTP signals above) |\n| `.csproj` | `\u003CTargetFrameworks>` (plural) | Multi-TFM — may need `--framework` |\n| `Directory.Build.props` | `\u003CTestingPlatformDotnetTestSupport>true` | MTP on SDK 8\u002F9 (often set here, not in .csproj) |\n| `Directory.Packages.props` | Centrally managed test package versions | Framework identity for CPM repos |\n\n**Quick detection summary:**\n\n| Signal | Means |\n|--------|-------|\n| `global.json` has `\"test\": { \"runner\": \"Microsoft.Testing.Platform\" }` | **MTP on SDK 10+** — pass args directly, no `--` |\n| `\u003CTestingPlatformDotnetTestSupport>true` in csproj or Directory.Build.props | **MTP on SDK 8\u002F9** — pass args after `--` |\n| Neither signal present | **VSTest** |\n\n### Step 2: Run tests\n\n#### VSTest (any .NET SDK version)\n\n```bash\ndotnet test [\u003CPROJECT> | \u003CSOLUTION> | \u003CDIRECTORY> | \u003CDLL> | \u003CEXE>]\n```\n\nCommon flags:\n\n| Flag | Description |\n|------|-------------|\n| `--framework \u003CTFM>` | Target a specific framework in multi-TFM projects (e.g., `net8.0`) |\n| `--no-build` | Skip build, use previously built output |\n| `--filter \u003CEXPRESSION>` | Run selected tests (see [Step 3](#step-3-run-filtered-tests)) |\n| `--logger trx` | Generate TRX results file |\n| `--collect \"Code Coverage\"` | Collect code coverage using Microsoft Code Coverage (built-in, always available) |\n| `--blame` | Enable blame mode to detect tests that crash the host |\n| `--blame-crash` | Collect a crash dump when the test host crashes |\n| `--blame-hang-timeout \u003Cduration>` | Abort test if it hangs longer than duration (e.g., `5min`) |\n| `-v \u003Clevel>` | Verbosity: `quiet`, `minimal`, `normal`, `detailed`, `diagnostic` |\n\n#### MTP with .NET SDK 8 or 9\n\nWith `\u003CTestingPlatformDotnetTestSupport>true\u003C\u002FTestingPlatformDotnetTestSupport>`, `dotnet test` bridges to MTP but uses VSTest-style argument parsing. MTP-specific arguments must be passed after `--`:\n\n```bash\ndotnet test [\u003CPROJECT> | \u003CSOLUTION> | \u003CDIRECTORY> | \u003CDLL> | \u003CEXE>] -- \u003CMTP_ARGUMENTS>\n```\n\n#### MTP with .NET SDK 10+\n\nWith the `global.json` runner set to `Microsoft.Testing.Platform`, `dotnet test` natively understands MTP arguments without `--`:\n\n```bash\ndotnet test\n    [--project \u003CPROJECT_OR_DIRECTORY>]\n    [--solution \u003CSOLUTION_OR_DIRECTORY>]\n    [--test-modules \u003CEXPRESSION>]\n    [\u003CMTP_ARGUMENTS>]\n```\n\nExamples:\n\n```bash\n# Run all tests in a project\ndotnet test --project path\u002Fto\u002FMyTests.csproj\n\n# Run all tests in a directory containing a project\ndotnet test --project path\u002Fto\u002F\n\n# Run all tests in a solution (sln, slnf, slnx)\ndotnet test --solution path\u002Fto\u002FMySolution.sln\ndotnet test --solution path\u002Fto\u002FMySolution.slnf\ndotnet test --solution path\u002Fto\u002FMySolution.slnx\n\n# Run all tests in a directory containing a solution\ndotnet test --solution path\u002Fto\u002F\n\n# Run with MTP flags\ndotnet test --project path\u002Fto\u002FMyTests.csproj --report-trx --blame-hang-timeout 5min\n```\n\n> **Note**: The .NET 10+ `dotnet test` syntax does **not** accept a bare positional argument like the VSTest syntax. Use `--project`, `--solution`, or `--test-modules` to specify the target.\n\n#### Common MTP flags\n\nThese flags apply to MTP on both SDK versions. On SDK 8\u002F9, pass after `--`; on SDK 10+, pass directly.\n\n> **Important:** `dotnet test`\u002FMSBuild flags such as `--framework`, `--no-build`, `--configuration`, and `--verbosity` are consumed by `dotnet test` itself (they drive restore\u002Fbuild\u002Fhost selection) and **always go BEFORE `--`**, regardless of platform or SDK. Only MTP test-platform arguments go after `--` on SDK 8\u002F9. For example: `dotnet test --framework net9.0 -- --report-trx` (built-in flag before `--`, MTP extension flag after).\n\n**Built-in flags (always available):**\n\n| Flag | Description |\n|------|-------------|\n| `--results-directory \u003CDIR>` | Directory for test result output |\n| `--diagnostic` | Enable diagnostic logging for the test platform |\n| `--diagnostic-output-directory \u003CDIR>` | Directory for diagnostic log output |\n\n**Extension-dependent flags (require the corresponding extension package to be registered):**\n\n| Flag | Requires | Description |\n|------|----------|-------------|\n| `--filter \u003CEXPRESSION>` | Framework-specific (not all frameworks support this) | Run selected tests (see [Step 3](#step-3-run-filtered-tests)) |\n| `--report-trx` | `Microsoft.Testing.Extensions.TrxReport` | Generate TRX results file |\n| `--report-trx-filename \u003CFILE>` | `Microsoft.Testing.Extensions.TrxReport` | Set TRX output filename |\n| `--blame-hang-timeout \u003Cduration>` | `Microsoft.Testing.Extensions.HangDump` | Abort test if it hangs longer than duration (e.g., `5min`) |\n| `--blame-crash` | `Microsoft.Testing.Extensions.CrashDump` | Collect a crash dump when the test host crashes |\n| `--coverage` | `Microsoft.Testing.Extensions.CodeCoverage` | Collect code coverage using Microsoft Code Coverage |\n\n> Some frameworks (e.g., MSTest) bundle common extensions by default. Others may require explicit package references. If a flag is not recognized, check that the corresponding extension package is referenced in the project.\n\n#### Alternative MTP invocations\n\nMTP test projects are standalone executables. Beyond `dotnet test`, they can be run directly:\n\n```bash\n# Build and run\ndotnet run --project \u003CPROJECT_PATH>\n\n# Run a previously built DLL\ndotnet exec \u003CPATH_TO_DLL>\n\n# Run the executable directly (Windows)\n\u003CPATH_TO_EXE>\n```\n\nThese alternative invocations accept MTP command line arguments directly (no `--` separator needed).\n\n### Step 3: Run filtered tests\n\nSee the `filter-syntax` skill for the complete filter syntax for each platform and framework combination. Key points:\n\n- **VSTest** (MSTest, xUnit v2, NUnit): `dotnet test --filter \u003CEXPRESSION>` with `=`, `!=`, `~`, `!~` operators\n- **MTP -- MSTest and NUnit**: Same `--filter` syntax as VSTest; pass after `--` on SDK 8\u002F9, directly on SDK 10+\n- **MTP -- xUnit v3**: Uses `--filter-class`, `--filter-method`, `--filter-trait` (not VSTest expression syntax). For a **single combined expression** (e.g., a class-name pattern AND a trait), use `--filter-query` with the xUnit v3 query filter language: path segments `\u002F\u003Cassembly>\u002F\u003Cnamespace>\u002F\u003Cclass>\u002F\u003Cmethod>` with `*` wildcards and a `[Trait=Value]` qualifier — for example `dotnet test -- --filter-query \"\u002F*\u002F*\u002F*IntegrationTests*\u002F*[Category=Smoke]\"`. See the `filter-syntax` skill for the full query language.\n- **MTP -- TUnit**: Uses `--treenode-filter` with path-based syntax\n\n#### When the user names a test category, trait, or group\n\nWhen the prompt names a subset of tests by category (e.g., \"integration tests\", \"unit tests\", \"smoke tests\", \"fast tests\"), **do not run all tests** — translate the user's vocabulary into the platform-appropriate filter:\n\n1. **Inspect the test source files** for filter-attribute annotations that match the named group:\n\n   | Framework | Attribute | Filter property |\n   |-----------|-----------|-----------------|\n   | MSTest | `[TestCategory(\"Integration\")]` | `TestCategory` |\n   | NUnit | `[Category(\"Integration\")]` | `TestCategory` (mapped) |\n   | xUnit v2 | `[Trait(\"Category\", \"Integration\")]` | `Category` |\n   | xUnit v3 | `[Trait(\"Category\", \"Integration\")]` | `Category` (use `--filter-trait`) |\n   | TUnit | `[Category(\"Integration\")]` | `Category` |\n\n2. **Build the filter expression** and combine it with the platform-correct invocation. For \"run the integration tests\" against an MSTest project:\n\n   | Platform | SDK | Command |\n   |----------|-----|---------|\n   | VSTest (MSTest) | any | `dotnet test --filter \"TestCategory=Integration\"` |\n   | MTP (MSTest) | 8 or 9 | `dotnet test -- --filter \"TestCategory=Integration\"` |\n   | MTP (MSTest) | 10+ | `dotnet test --filter \"TestCategory=Integration\"` |\n   | MTP (xUnit v3) | 8 or 9 | `dotnet test -- --filter-trait \"Category=Integration\"` |\n   | MTP (xUnit v3) | 10+ | `dotnet test --filter-trait \"Category=Integration\"` |\n   | MTP (TUnit) | 8 or 9 | `dotnet test -- --treenode-filter \"\u002F*\u002F*\u002F*\u002F*[Category=Integration]\"` |\n\n3. If you cannot find a matching attribute, ask the user to confirm the category name or fall back to a name-pattern filter (e.g., `--filter \"FullyQualifiedName~Integration\"`).\n\n## Validation\n\n- [ ] Test platform (VSTest or MTP) was correctly identified\n- [ ] Test framework (MSTest, xUnit, NUnit, TUnit) was correctly identified\n- [ ] Correct `dotnet test` invocation was used for the detected platform and SDK version\n- [ ] When the user named a test category\u002Ftrait\u002Fgroup, the appropriate filter was applied (not \"run all tests\")\n- [ ] Filter expressions used the syntax appropriate for the platform and framework\n- [ ] Test results were clearly reported to the user\n\n## Common Pitfalls\n\n| Pitfall | Solution |\n|---------|----------|\n| Missing `Microsoft.NET.Test.Sdk` in a VSTest project | Tests won't be discovered. Add `\u003CPackageReference Include=\"Microsoft.NET.Test.Sdk\" \u002F>` |\n| Using VSTest `--filter` syntax with xUnit v3 on MTP | xUnit v3 on MTP uses `--filter-class`, `--filter-method`, etc. -- not the VSTest expression syntax |\n| Passing MTP args without `--` on .NET SDK 8\u002F9 | Before .NET 10, MTP args must go after `--`: `dotnet test -- --report-trx` |\n| Using `-- --arg` separator on .NET SDK 10+ | SDK 10+ passes MTP args directly — do NOT use `--` separator |\n| Using `--logger trx` for MTP or `--report-trx` for VSTest | Each platform has its own TRX flag — check the Critical Rules table |\n| Only checking `.csproj` for MTP signals | Always check `Directory.Build.props` and `Directory.Packages.props` too — MTP properties are frequently set there |\n| Using bare positional path argument on SDK 10+ | SDK 10+ requires named flags: `--project \u003Cpath>` or `--solution \u003Cpath>` |\n\n## Troubleshooting\n\nCommon error messages and how to resolve them:\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| `No test is available` or `No test matches the given testcase filter` | Wrong filter syntax for the platform\u002Fframework, or tests not discovered | Verify filter syntax matches the platform (see `filter-syntax` skill). For discovery issues, check that the test SDK and adapter packages are installed |\n| `The --report-trx option is unrecognized` | MTP extension package not referenced, or using MTP flag on a VSTest project | Add `\u003CPackageReference Include=\"Microsoft.Testing.Extensions.TrxReport\" \u002F>` for MTP, or use `--logger trx` for VSTest |\n| `The --blame-hang-timeout option is unrecognized` | Missing HangDump extension on MTP | Add `\u003CPackageReference Include=\"Microsoft.Testing.Extensions.HangDump\" \u002F>` |\n| `error NETSDK1045: The current .NET SDK does not support targeting .NET X.0` | SDK version in `global.json` doesn't match the project's target framework | Update `global.json` SDK version or install the required SDK |\n| `The test runner process exited with non-zero exit code` | MTP test host crashed or test failure | Run with `--blame-crash` (MTP) or `--blame` (VSTest) to collect a crash dump for diagnosis |\n| `No test source files were found` \u002F `No test project found` | `dotnet test` can't find a test project in the given path | Specify the path explicitly: `dotnet test \u003Cpath\u002Fto\u002Fproject.csproj>` (VSTest) or `dotnet test --project \u003Cpath>` (SDK 10+) |\n| Tests discovered but 0 executed | Filter expression matches no tests | Double-check filter property names and values. Common typo: `TestCategory` (MSTest) vs `Category` (NUnit) vs trait syntax (xUnit) |\n| Using `--` for MTP args on .NET SDK 10+ | On .NET 10+, MTP args are passed directly: `dotnet test --project . --blame-hang-timeout 5min` — do NOT use `-- --blame-hang-timeout` |\n| Multi-TFM project runs tests for all frameworks | Use `--framework \u003CTFM>` to target a specific framework |\n| `global.json` runner setting ignored | Requires .NET 10+ SDK. On older SDKs, use `\u003CTestingPlatformDotnetTestSupport>` MSBuild property instead |\n| TUnit `--treenode-filter` not recognized | TUnit is MTP-only. On .NET SDK 10+ use `dotnet test`; on older SDKs use `dotnet run` since VSTest-mode `dotnet test` does not support TUnit |\n",{"data":35,"body":36},{"name":4,"description":6,"license":25},{"type":37,"children":38},"root",[39,48,63,70,95,101,152,158,250,256,261,547,553,560,652,690,717,723,845,853,1113,1121,1217,1223,1230,1342,1347,1569,1575,1601,1716,1722,1754,1872,1877,2122,2173,2179,2191,2279,2287,2358,2366,2544,2552,2558,2570,2695,2707,2713,2726,2899,2905,2917,3261,3267,3336,3342,3564,3570,3575,3988],{"type":40,"tag":41,"props":42,"children":44},"element","h1",{"id":43},"run-net-tests",[45],{"type":46,"value":47},"text","Run .NET Tests",{"type":40,"tag":49,"props":50,"children":51},"p",{},[52,54,61],{"type":46,"value":53},"Detect the test platform and framework, run tests, and apply filters using ",{"type":40,"tag":55,"props":56,"children":58},"code",{"className":57},[],[59],{"type":46,"value":60},"dotnet test",{"type":46,"value":62},".",{"type":40,"tag":64,"props":65,"children":67},"h2",{"id":66},"when-to-use",[68],{"type":46,"value":69},"When to Use",{"type":40,"tag":71,"props":72,"children":73},"ul",{},[74,80,85,90],{"type":40,"tag":75,"props":76,"children":77},"li",{},[78],{"type":46,"value":79},"User wants to run tests in a .NET project",{"type":40,"tag":75,"props":81,"children":82},{},[83],{"type":46,"value":84},"User needs to run a subset of tests using filters",{"type":40,"tag":75,"props":86,"children":87},{},[88],{"type":46,"value":89},"User needs help detecting which test platform (VSTest vs MTP) or framework is in use",{"type":40,"tag":75,"props":91,"children":92},{},[93],{"type":46,"value":94},"User wants to understand the correct filter syntax for their setup",{"type":40,"tag":64,"props":96,"children":98},{"id":97},"when-not-to-use",[99],{"type":46,"value":100},"When Not to Use",{"type":40,"tag":71,"props":102,"children":103},{},[104,117,130,142,147],{"type":40,"tag":75,"props":105,"children":106},{},[107,109,115],{"type":46,"value":108},"User needs to write or generate test code (use ",{"type":40,"tag":55,"props":110,"children":112},{"className":111},[],[113],{"type":46,"value":114},"writing-mstest-tests",{"type":46,"value":116}," for MSTest, or general coding assistance for other frameworks)",{"type":40,"tag":75,"props":118,"children":119},{},[120,122,128],{"type":46,"value":121},"User needs to migrate from VSTest to MTP (use ",{"type":40,"tag":55,"props":123,"children":125},{"className":124},[],[126],{"type":46,"value":127},"migrate-vstest-to-mtp",{"type":46,"value":129},")",{"type":40,"tag":75,"props":131,"children":132},{},[133,135,141],{"type":46,"value":134},"User wants to iterate on failing tests without rebuilding (use ",{"type":40,"tag":55,"props":136,"children":138},{"className":137},[],[139],{"type":46,"value":140},"mtp-hot-reload",{"type":46,"value":129},{"type":40,"tag":75,"props":143,"children":144},{},[145],{"type":46,"value":146},"User needs CI\u002FCD pipeline configuration (use CI-specific skills)",{"type":40,"tag":75,"props":148,"children":149},{},[150],{"type":46,"value":151},"User needs to debug a test (use debugging skills)",{"type":40,"tag":64,"props":153,"children":155},{"id":154},"inputs",[156],{"type":46,"value":157},"Inputs",{"type":40,"tag":159,"props":160,"children":161},"table",{},[162,186],{"type":40,"tag":163,"props":164,"children":165},"thead",{},[166],{"type":40,"tag":167,"props":168,"children":169},"tr",{},[170,176,181],{"type":40,"tag":171,"props":172,"children":173},"th",{},[174],{"type":46,"value":175},"Input",{"type":40,"tag":171,"props":177,"children":178},{},[179],{"type":46,"value":180},"Required",{"type":40,"tag":171,"props":182,"children":183},{},[184],{"type":46,"value":185},"Description",{"type":40,"tag":187,"props":188,"children":189},"tbody",{},[190,209,226],{"type":40,"tag":167,"props":191,"children":192},{},[193,199,204],{"type":40,"tag":194,"props":195,"children":196},"td",{},[197],{"type":46,"value":198},"Project or solution path",{"type":40,"tag":194,"props":200,"children":201},{},[202],{"type":46,"value":203},"No",{"type":40,"tag":194,"props":205,"children":206},{},[207],{"type":46,"value":208},"Path to the test project (.csproj) or solution (.sln, .slnf, .slnx). Defaults to current directory.",{"type":40,"tag":167,"props":210,"children":211},{},[212,217,221],{"type":40,"tag":194,"props":213,"children":214},{},[215],{"type":46,"value":216},"Filter expression",{"type":40,"tag":194,"props":218,"children":219},{},[220],{"type":46,"value":203},{"type":40,"tag":194,"props":222,"children":223},{},[224],{"type":46,"value":225},"Filter expression to select specific tests",{"type":40,"tag":167,"props":227,"children":228},{},[229,234,238],{"type":40,"tag":194,"props":230,"children":231},{},[232],{"type":46,"value":233},"Target framework",{"type":40,"tag":194,"props":235,"children":236},{},[237],{"type":46,"value":203},{"type":40,"tag":194,"props":239,"children":240},{},[241,243,249],{"type":46,"value":242},"Target framework moniker to run against (e.g., ",{"type":40,"tag":55,"props":244,"children":246},{"className":245},[],[247],{"type":46,"value":248},"net8.0",{"type":46,"value":129},{"type":40,"tag":64,"props":251,"children":253},{"id":252},"critical-rules-avoid-cross-platform-mistakes",[254],{"type":46,"value":255},"Critical Rules — Avoid Cross-Platform Mistakes",{"type":40,"tag":49,"props":257,"children":258},{},[259],{"type":46,"value":260},"These are the most common agent mistakes. Internalize before proceeding:",{"type":40,"tag":159,"props":262,"children":263},{},[264,280],{"type":40,"tag":163,"props":265,"children":266},{},[267],{"type":40,"tag":167,"props":268,"children":269},{},[270,275],{"type":40,"tag":171,"props":271,"children":272},{},[273],{"type":46,"value":274},"Rule",{"type":40,"tag":171,"props":276,"children":277},{},[278],{"type":46,"value":279},"Why",{"type":40,"tag":187,"props":281,"children":282},{},[283,316,343,372,402,446,480,517],{"type":40,"tag":167,"props":284,"children":285},{},[286,303],{"type":40,"tag":194,"props":287,"children":288},{},[289,301],{"type":40,"tag":290,"props":291,"children":292},"strong",{},[293,295],{"type":46,"value":294},"Do NOT use ",{"type":40,"tag":55,"props":296,"children":298},{"className":297},[],[299],{"type":46,"value":300},"--logger trx",{"type":46,"value":302}," for MTP projects",{"type":40,"tag":194,"props":304,"children":305},{},[306,308,314],{"type":46,"value":307},"MTP uses ",{"type":40,"tag":55,"props":309,"children":311},{"className":310},[],[312],{"type":46,"value":313},"--report-trx",{"type":46,"value":315}," (requires the TrxReport extension package)",{"type":40,"tag":167,"props":317,"children":318},{},[319,333],{"type":40,"tag":194,"props":320,"children":321},{},[322,331],{"type":40,"tag":290,"props":323,"children":324},{},[325,326],{"type":46,"value":294},{"type":40,"tag":55,"props":327,"children":329},{"className":328},[],[330],{"type":46,"value":313},{"type":46,"value":332}," for VSTest projects",{"type":40,"tag":194,"props":334,"children":335},{},[336,338],{"type":46,"value":337},"VSTest uses ",{"type":40,"tag":55,"props":339,"children":341},{"className":340},[],[342],{"type":46,"value":300},{"type":40,"tag":167,"props":344,"children":345},{},[346,361],{"type":40,"tag":194,"props":347,"children":348},{},[349,359],{"type":40,"tag":290,"props":350,"children":351},{},[352,353],{"type":46,"value":294},{"type":40,"tag":55,"props":354,"children":356},{"className":355},[],[357],{"type":46,"value":358},"-- --arg",{"type":46,"value":360}," on .NET SDK 10+",{"type":40,"tag":194,"props":362,"children":363},{},[364,366],{"type":46,"value":365},"SDK 10+ passes MTP args directly: ",{"type":40,"tag":55,"props":367,"children":369},{"className":368},[],[370],{"type":46,"value":371},"dotnet test --project . --report-trx",{"type":40,"tag":167,"props":373,"children":374},{},[375,391],{"type":40,"tag":194,"props":376,"children":377},{},[378,389],{"type":40,"tag":290,"props":379,"children":380},{},[381,383],{"type":46,"value":382},"Do NOT omit ",{"type":40,"tag":55,"props":384,"children":386},{"className":385},[],[387],{"type":46,"value":388},"--",{"type":46,"value":390}," on .NET SDK 8\u002F9 with MTP",{"type":40,"tag":194,"props":392,"children":393},{},[394,396],{"type":46,"value":395},"SDK 8\u002F9 requires the separator: ",{"type":40,"tag":55,"props":397,"children":399},{"className":398},[],[400],{"type":46,"value":401},"dotnet test -- --report-trx",{"type":40,"tag":167,"props":403,"children":404},{},[405,420],{"type":40,"tag":194,"props":406,"children":407},{},[408,418],{"type":40,"tag":290,"props":409,"children":410},{},[411,412],{"type":46,"value":294},{"type":40,"tag":55,"props":413,"children":415},{"className":414},[],[416],{"type":46,"value":417},"--filter \"ClassName=...\"",{"type":46,"value":419}," with xUnit v3 on MTP",{"type":40,"tag":194,"props":421,"children":422},{},[423,425,431,433,439,440],{"type":46,"value":424},"xUnit v3 on MTP uses ",{"type":40,"tag":55,"props":426,"children":428},{"className":427},[],[429],{"type":46,"value":430},"--filter-class",{"type":46,"value":432},", ",{"type":40,"tag":55,"props":434,"children":436},{"className":435},[],[437],{"type":46,"value":438},"--filter-method",{"type":46,"value":432},{"type":40,"tag":55,"props":441,"children":443},{"className":442},[],[444],{"type":46,"value":445},"--filter-trait",{"type":40,"tag":167,"props":447,"children":448},{},[449,459],{"type":40,"tag":194,"props":450,"children":451},{},[452,457],{"type":40,"tag":290,"props":453,"children":454},{},[455],{"type":46,"value":456},"Do NOT use bare positional path",{"type":46,"value":458}," on SDK 10+",{"type":40,"tag":194,"props":460,"children":461},{},[462,464,470,472,478],{"type":46,"value":463},"Use ",{"type":40,"tag":55,"props":465,"children":467},{"className":466},[],[468],{"type":46,"value":469},"--project \u003Cpath>",{"type":46,"value":471}," or ",{"type":40,"tag":55,"props":473,"children":475},{"className":474},[],[476],{"type":46,"value":477},"--solution \u003Cpath>",{"type":46,"value":479}," instead",{"type":40,"tag":167,"props":481,"children":482},{},[483,497],{"type":40,"tag":194,"props":484,"children":485},{},[486,496],{"type":40,"tag":290,"props":487,"children":488},{},[489,490],{"type":46,"value":294},{"type":40,"tag":55,"props":491,"children":493},{"className":492},[],[494],{"type":46,"value":495},"--blame",{"type":46,"value":302},{"type":40,"tag":194,"props":498,"children":499},{},[500,501,507,509,515],{"type":46,"value":307},{"type":40,"tag":55,"props":502,"children":504},{"className":503},[],[505],{"type":46,"value":506},"--blame-crash",{"type":46,"value":508}," and ",{"type":40,"tag":55,"props":510,"children":512},{"className":511},[],[513],{"type":46,"value":514},"--blame-hang-timeout",{"type":46,"value":516}," separately (each requires its extension package)",{"type":40,"tag":167,"props":518,"children":519},{},[520,535],{"type":40,"tag":194,"props":521,"children":522},{},[523,533],{"type":40,"tag":290,"props":524,"children":525},{},[526,527],{"type":46,"value":294},{"type":40,"tag":55,"props":528,"children":530},{"className":529},[],[531],{"type":46,"value":532},"--collect \"Code Coverage\"",{"type":46,"value":534}," for MTP",{"type":40,"tag":194,"props":536,"children":537},{},[538,539,545],{"type":46,"value":307},{"type":40,"tag":55,"props":540,"children":542},{"className":541},[],[543],{"type":46,"value":544},"--coverage",{"type":46,"value":546}," (requires the CodeCoverage extension package)",{"type":40,"tag":64,"props":548,"children":550},{"id":549},"workflow",[551],{"type":46,"value":552},"Workflow",{"type":40,"tag":554,"props":555,"children":557},"h3",{"id":556},"quick-reference",[558],{"type":46,"value":559},"Quick Reference",{"type":40,"tag":159,"props":561,"children":562},{},[563,584],{"type":40,"tag":163,"props":564,"children":565},{},[566],{"type":40,"tag":167,"props":567,"children":568},{},[569,574,579],{"type":40,"tag":171,"props":570,"children":571},{},[572],{"type":46,"value":573},"Platform",{"type":40,"tag":171,"props":575,"children":576},{},[577],{"type":46,"value":578},"SDK",{"type":40,"tag":171,"props":580,"children":581},{},[582],{"type":46,"value":583},"Command pattern",{"type":40,"tag":187,"props":585,"children":586},{},[587,609,631],{"type":40,"tag":167,"props":588,"children":589},{},[590,595,600],{"type":40,"tag":194,"props":591,"children":592},{},[593],{"type":46,"value":594},"VSTest",{"type":40,"tag":194,"props":596,"children":597},{},[598],{"type":46,"value":599},"Any",{"type":40,"tag":194,"props":601,"children":602},{},[603],{"type":40,"tag":55,"props":604,"children":606},{"className":605},[],[607],{"type":46,"value":608},"dotnet test [\u003Cpath>] [--filter \u003Cexpr>] [--logger trx]",{"type":40,"tag":167,"props":610,"children":611},{},[612,617,622],{"type":40,"tag":194,"props":613,"children":614},{},[615],{"type":46,"value":616},"MTP",{"type":40,"tag":194,"props":618,"children":619},{},[620],{"type":46,"value":621},"8 or 9",{"type":40,"tag":194,"props":623,"children":624},{},[625],{"type":40,"tag":55,"props":626,"children":628},{"className":627},[],[629],{"type":46,"value":630},"dotnet test [\u003Cpath>] -- \u003CMTP_ARGS>",{"type":40,"tag":167,"props":632,"children":633},{},[634,638,643],{"type":40,"tag":194,"props":635,"children":636},{},[637],{"type":46,"value":616},{"type":40,"tag":194,"props":639,"children":640},{},[641],{"type":46,"value":642},"10+",{"type":40,"tag":194,"props":644,"children":645},{},[646],{"type":40,"tag":55,"props":647,"children":649},{"className":648},[],[650],{"type":46,"value":651},"dotnet test --project \u003Cpath> \u003CMTP_ARGS>",{"type":40,"tag":49,"props":653,"children":654},{},[655,660,662,668,670,676,677,683,684],{"type":40,"tag":290,"props":656,"children":657},{},[658],{"type":46,"value":659},"Detection files to always check",{"type":46,"value":661}," (in order): ",{"type":40,"tag":55,"props":663,"children":665},{"className":664},[],[666],{"type":46,"value":667},"global.json",{"type":46,"value":669}," -> ",{"type":40,"tag":55,"props":671,"children":673},{"className":672},[],[674],{"type":46,"value":675},".csproj",{"type":46,"value":669},{"type":40,"tag":55,"props":678,"children":680},{"className":679},[],[681],{"type":46,"value":682},"Directory.Build.props",{"type":46,"value":669},{"type":40,"tag":55,"props":685,"children":687},{"className":686},[],[688],{"type":46,"value":689},"Directory.Packages.props",{"type":40,"tag":49,"props":691,"children":692},{},[693,698,700,706,708,715],{"type":40,"tag":290,"props":694,"children":695},{},[696],{"type":46,"value":697},"If the prompt names a subset of tests",{"type":46,"value":699}," (e.g., \"integration tests\", \"smoke tests\", a specific class, a specific TFM), plan to apply the matching filter \u002F ",{"type":40,"tag":55,"props":701,"children":703},{"className":702},[],[704],{"type":46,"value":705},"--framework",{"type":46,"value":707}," in ",{"type":40,"tag":709,"props":710,"children":712},"a",{"href":711},"#step-3-run-filtered-tests",[713],{"type":46,"value":714},"Step 3",{"type":46,"value":716}," — do not run the whole suite.",{"type":40,"tag":554,"props":718,"children":720},{"id":719},"step-1-detect-the-test-platform-and-framework",[721],{"type":46,"value":722},"Step 1: Detect the test platform and framework",{"type":40,"tag":724,"props":725,"children":726},"ol",{},[727,747,781,832],{"type":40,"tag":75,"props":728,"children":729},{},[730,732,738,740,745],{"type":46,"value":731},"Run ",{"type":40,"tag":55,"props":733,"children":735},{"className":734},[],[736],{"type":46,"value":737},"dotnet --version",{"type":46,"value":739}," in the project directory to determine the SDK version. This accounts for ",{"type":40,"tag":55,"props":741,"children":743},{"className":742},[],[744],{"type":46,"value":667},{"type":46,"value":746}," SDK pinning.",{"type":40,"tag":75,"props":748,"children":749},{},[750,752,757,759,765,767,772,774,779],{"type":46,"value":751},"Read ",{"type":40,"tag":55,"props":753,"children":755},{"className":754},[],[756],{"type":46,"value":667},{"type":46,"value":758}," — on .NET SDK 10+, ",{"type":40,"tag":55,"props":760,"children":762},{"className":761},[],[763],{"type":46,"value":764},"\"test\": { \"runner\": \"Microsoft.Testing.Platform\" }",{"type":46,"value":766}," is the ",{"type":40,"tag":290,"props":768,"children":769},{},[770],{"type":46,"value":771},"authoritative MTP signal",{"type":46,"value":773},". If present, the project uses MTP and SDK 10+ syntax (no ",{"type":40,"tag":55,"props":775,"children":777},{"className":776},[],[778],{"type":46,"value":388},{"type":46,"value":780}," separator).",{"type":40,"tag":75,"props":782,"children":783},{},[784,785,790,791,796,797,802,804,809,811,816,818,823,825,830],{"type":46,"value":751},{"type":40,"tag":55,"props":786,"children":788},{"className":787},[],[789],{"type":46,"value":675},{"type":46,"value":432},{"type":40,"tag":55,"props":792,"children":794},{"className":793},[],[795],{"type":46,"value":682},{"type":46,"value":432},{"type":40,"tag":290,"props":798,"children":799},{},[800],{"type":46,"value":801},"and",{"type":46,"value":803}," ",{"type":40,"tag":55,"props":805,"children":807},{"className":806},[],[808],{"type":46,"value":689},{"type":46,"value":810}," for framework packages and MTP properties. ",{"type":40,"tag":290,"props":812,"children":813},{},[814],{"type":46,"value":815},"Always check all three files",{"type":46,"value":817}," — MTP properties are frequently set in ",{"type":40,"tag":55,"props":819,"children":821},{"className":820},[],[822],{"type":46,"value":682},{"type":46,"value":824}," rather than individual ",{"type":40,"tag":55,"props":826,"children":828},{"className":827},[],[829],{"type":46,"value":675},{"type":46,"value":831}," files.",{"type":40,"tag":75,"props":833,"children":834},{},[835,837,843],{"type":46,"value":836},"For full detection logic (SDK 8\u002F9 signals, framework identification), see the ",{"type":40,"tag":55,"props":838,"children":840},{"className":839},[],[841],{"type":46,"value":842},"platform-detection",{"type":46,"value":844}," skill.",{"type":40,"tag":49,"props":846,"children":847},{},[848],{"type":40,"tag":290,"props":849,"children":850},{},[851],{"type":46,"value":852},"What to look for in each file:",{"type":40,"tag":159,"props":854,"children":855},{},[856,877],{"type":40,"tag":163,"props":857,"children":858},{},[859],{"type":40,"tag":167,"props":860,"children":861},{},[862,867,872],{"type":40,"tag":171,"props":863,"children":864},{},[865],{"type":46,"value":866},"File",{"type":40,"tag":171,"props":868,"children":869},{},[870],{"type":46,"value":871},"Look for",{"type":40,"tag":171,"props":873,"children":874},{},[875],{"type":46,"value":876},"Indicates",{"type":40,"tag":187,"props":878,"children":879},{},[880,904,936,961,1009,1036,1068,1092],{"type":40,"tag":167,"props":881,"children":882},{},[883,891,899],{"type":40,"tag":194,"props":884,"children":885},{},[886],{"type":40,"tag":55,"props":887,"children":889},{"className":888},[],[890],{"type":46,"value":667},{"type":40,"tag":194,"props":892,"children":893},{},[894],{"type":40,"tag":55,"props":895,"children":897},{"className":896},[],[898],{"type":46,"value":764},{"type":40,"tag":194,"props":900,"children":901},{},[902],{"type":46,"value":903},"MTP on SDK 10+",{"type":40,"tag":167,"props":905,"children":906},{},[907,915,924],{"type":40,"tag":194,"props":908,"children":909},{},[910],{"type":40,"tag":55,"props":911,"children":913},{"className":912},[],[914],{"type":46,"value":667},{"type":40,"tag":194,"props":916,"children":917},{},[918],{"type":40,"tag":55,"props":919,"children":921},{"className":920},[],[922],{"type":46,"value":923},"\"sdk\": { \"version\": \"...\" }",{"type":40,"tag":194,"props":925,"children":926},{},[927,929,934],{"type":46,"value":928},"SDK version (determines ",{"type":40,"tag":55,"props":930,"children":932},{"className":931},[],[933],{"type":46,"value":388},{"type":46,"value":935}," separator behavior)",{"type":40,"tag":167,"props":937,"children":938},{},[939,947,956],{"type":40,"tag":194,"props":940,"children":941},{},[942],{"type":40,"tag":55,"props":943,"children":945},{"className":944},[],[946],{"type":46,"value":675},{"type":40,"tag":194,"props":948,"children":949},{},[950],{"type":40,"tag":55,"props":951,"children":953},{"className":952},[],[954],{"type":46,"value":955},"\u003CTestingPlatformDotnetTestSupport>true",{"type":40,"tag":194,"props":957,"children":958},{},[959],{"type":46,"value":960},"MTP on SDK 8\u002F9",{"type":40,"tag":167,"props":962,"children":963},{},[964,972,1004],{"type":40,"tag":194,"props":965,"children":966},{},[967],{"type":40,"tag":55,"props":968,"children":970},{"className":969},[],[971],{"type":46,"value":675},{"type":40,"tag":194,"props":973,"children":974},{},[975,981,982,988,989,995,996,1002],{"type":40,"tag":55,"props":976,"children":978},{"className":977},[],[979],{"type":46,"value":980},"MSTest",{"type":46,"value":432},{"type":40,"tag":55,"props":983,"children":985},{"className":984},[],[986],{"type":46,"value":987},"xunit.v3",{"type":46,"value":432},{"type":40,"tag":55,"props":990,"children":992},{"className":991},[],[993],{"type":46,"value":994},"NUnit",{"type":46,"value":432},{"type":40,"tag":55,"props":997,"children":999},{"className":998},[],[1000],{"type":46,"value":1001},"TUnit",{"type":46,"value":1003}," packages",{"type":40,"tag":194,"props":1005,"children":1006},{},[1007],{"type":46,"value":1008},"Framework identity",{"type":40,"tag":167,"props":1010,"children":1011},{},[1012,1020,1031],{"type":40,"tag":194,"props":1013,"children":1014},{},[1015],{"type":40,"tag":55,"props":1016,"children":1018},{"className":1017},[],[1019],{"type":46,"value":675},{"type":40,"tag":194,"props":1021,"children":1022},{},[1023,1029],{"type":40,"tag":55,"props":1024,"children":1026},{"className":1025},[],[1027],{"type":46,"value":1028},"Microsoft.NET.Test.Sdk",{"type":46,"value":1030}," + test adapter",{"type":40,"tag":194,"props":1032,"children":1033},{},[1034],{"type":46,"value":1035},"VSTest (unless overridden by MTP signals above)",{"type":40,"tag":167,"props":1037,"children":1038},{},[1039,1047,1058],{"type":40,"tag":194,"props":1040,"children":1041},{},[1042],{"type":40,"tag":55,"props":1043,"children":1045},{"className":1044},[],[1046],{"type":46,"value":675},{"type":40,"tag":194,"props":1048,"children":1049},{},[1050,1056],{"type":40,"tag":55,"props":1051,"children":1053},{"className":1052},[],[1054],{"type":46,"value":1055},"\u003CTargetFrameworks>",{"type":46,"value":1057}," (plural)",{"type":40,"tag":194,"props":1059,"children":1060},{},[1061,1063],{"type":46,"value":1062},"Multi-TFM — may need ",{"type":40,"tag":55,"props":1064,"children":1066},{"className":1065},[],[1067],{"type":46,"value":705},{"type":40,"tag":167,"props":1069,"children":1070},{},[1071,1079,1087],{"type":40,"tag":194,"props":1072,"children":1073},{},[1074],{"type":40,"tag":55,"props":1075,"children":1077},{"className":1076},[],[1078],{"type":46,"value":682},{"type":40,"tag":194,"props":1080,"children":1081},{},[1082],{"type":40,"tag":55,"props":1083,"children":1085},{"className":1084},[],[1086],{"type":46,"value":955},{"type":40,"tag":194,"props":1088,"children":1089},{},[1090],{"type":46,"value":1091},"MTP on SDK 8\u002F9 (often set here, not in .csproj)",{"type":40,"tag":167,"props":1093,"children":1094},{},[1095,1103,1108],{"type":40,"tag":194,"props":1096,"children":1097},{},[1098],{"type":40,"tag":55,"props":1099,"children":1101},{"className":1100},[],[1102],{"type":46,"value":689},{"type":40,"tag":194,"props":1104,"children":1105},{},[1106],{"type":46,"value":1107},"Centrally managed test package versions",{"type":40,"tag":194,"props":1109,"children":1110},{},[1111],{"type":46,"value":1112},"Framework identity for CPM repos",{"type":40,"tag":49,"props":1114,"children":1115},{},[1116],{"type":40,"tag":290,"props":1117,"children":1118},{},[1119],{"type":46,"value":1120},"Quick detection summary:",{"type":40,"tag":159,"props":1122,"children":1123},{},[1124,1140],{"type":40,"tag":163,"props":1125,"children":1126},{},[1127],{"type":40,"tag":167,"props":1128,"children":1129},{},[1130,1135],{"type":40,"tag":171,"props":1131,"children":1132},{},[1133],{"type":46,"value":1134},"Signal",{"type":40,"tag":171,"props":1136,"children":1137},{},[1138],{"type":46,"value":1139},"Means",{"type":40,"tag":187,"props":1141,"children":1142},{},[1143,1175,1202],{"type":40,"tag":167,"props":1144,"children":1145},{},[1146,1161],{"type":40,"tag":194,"props":1147,"children":1148},{},[1149,1154,1156],{"type":40,"tag":55,"props":1150,"children":1152},{"className":1151},[],[1153],{"type":46,"value":667},{"type":46,"value":1155}," has ",{"type":40,"tag":55,"props":1157,"children":1159},{"className":1158},[],[1160],{"type":46,"value":764},{"type":40,"tag":194,"props":1162,"children":1163},{},[1164,1168,1170],{"type":40,"tag":290,"props":1165,"children":1166},{},[1167],{"type":46,"value":903},{"type":46,"value":1169}," — pass args directly, no ",{"type":40,"tag":55,"props":1171,"children":1173},{"className":1172},[],[1174],{"type":46,"value":388},{"type":40,"tag":167,"props":1176,"children":1177},{},[1178,1188],{"type":40,"tag":194,"props":1179,"children":1180},{},[1181,1186],{"type":40,"tag":55,"props":1182,"children":1184},{"className":1183},[],[1185],{"type":46,"value":955},{"type":46,"value":1187}," in csproj or Directory.Build.props",{"type":40,"tag":194,"props":1189,"children":1190},{},[1191,1195,1197],{"type":40,"tag":290,"props":1192,"children":1193},{},[1194],{"type":46,"value":960},{"type":46,"value":1196}," — pass args after ",{"type":40,"tag":55,"props":1198,"children":1200},{"className":1199},[],[1201],{"type":46,"value":388},{"type":40,"tag":167,"props":1203,"children":1204},{},[1205,1210],{"type":40,"tag":194,"props":1206,"children":1207},{},[1208],{"type":46,"value":1209},"Neither signal present",{"type":40,"tag":194,"props":1211,"children":1212},{},[1213],{"type":40,"tag":290,"props":1214,"children":1215},{},[1216],{"type":46,"value":594},{"type":40,"tag":554,"props":1218,"children":1220},{"id":1219},"step-2-run-tests",[1221],{"type":46,"value":1222},"Step 2: Run tests",{"type":40,"tag":1224,"props":1225,"children":1227},"h4",{"id":1226},"vstest-any-net-sdk-version",[1228],{"type":46,"value":1229},"VSTest (any .NET SDK version)",{"type":40,"tag":1231,"props":1232,"children":1237},"pre",{"className":1233,"code":1234,"language":1235,"meta":1236,"style":1236},"language-bash shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","dotnet test [\u003CPROJECT> | \u003CSOLUTION> | \u003CDIRECTORY> | \u003CDLL> | \u003CEXE>]\n","bash","",[1238],{"type":40,"tag":55,"props":1239,"children":1240},{"__ignoreMap":1236},[1241],{"type":40,"tag":1242,"props":1243,"children":1246},"span",{"class":1244,"line":1245},"line",1,[1247,1252,1258,1264,1270,1275,1280,1285,1289,1293,1298,1302,1306,1310,1315,1319,1323,1327,1332,1337],{"type":40,"tag":1242,"props":1248,"children":1250},{"style":1249},"--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B",[1251],{"type":46,"value":8},{"type":40,"tag":1242,"props":1253,"children":1255},{"style":1254},"--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D",[1256],{"type":46,"value":1257}," test",{"type":40,"tag":1242,"props":1259,"children":1261},{"style":1260},"--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8",[1262],{"type":46,"value":1263}," [\u003CPROJECT> ",{"type":40,"tag":1242,"props":1265,"children":1267},{"style":1266},"--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF",[1268],{"type":46,"value":1269},"|",{"type":40,"tag":1242,"props":1271,"children":1272},{"style":1266},[1273],{"type":46,"value":1274}," \u003C",{"type":40,"tag":1242,"props":1276,"children":1277},{"style":1249},[1278],{"type":46,"value":1279},"SOLUTION",{"type":40,"tag":1242,"props":1281,"children":1282},{"style":1260},[1283],{"type":46,"value":1284},"> ",{"type":40,"tag":1242,"props":1286,"children":1287},{"style":1266},[1288],{"type":46,"value":1269},{"type":40,"tag":1242,"props":1290,"children":1291},{"style":1266},[1292],{"type":46,"value":1274},{"type":40,"tag":1242,"props":1294,"children":1295},{"style":1249},[1296],{"type":46,"value":1297},"DIRECTORY",{"type":40,"tag":1242,"props":1299,"children":1300},{"style":1260},[1301],{"type":46,"value":1284},{"type":40,"tag":1242,"props":1303,"children":1304},{"style":1266},[1305],{"type":46,"value":1269},{"type":40,"tag":1242,"props":1307,"children":1308},{"style":1266},[1309],{"type":46,"value":1274},{"type":40,"tag":1242,"props":1311,"children":1312},{"style":1249},[1313],{"type":46,"value":1314},"DLL",{"type":40,"tag":1242,"props":1316,"children":1317},{"style":1260},[1318],{"type":46,"value":1284},{"type":40,"tag":1242,"props":1320,"children":1321},{"style":1266},[1322],{"type":46,"value":1269},{"type":40,"tag":1242,"props":1324,"children":1325},{"style":1266},[1326],{"type":46,"value":1274},{"type":40,"tag":1242,"props":1328,"children":1329},{"style":1249},[1330],{"type":46,"value":1331},"EXE",{"type":40,"tag":1242,"props":1333,"children":1334},{"style":1260},[1335],{"type":46,"value":1336},">",{"type":40,"tag":1242,"props":1338,"children":1339},{"style":1254},[1340],{"type":46,"value":1341},"]\n",{"type":40,"tag":49,"props":1343,"children":1344},{},[1345],{"type":46,"value":1346},"Common flags:",{"type":40,"tag":159,"props":1348,"children":1349},{},[1350,1365],{"type":40,"tag":163,"props":1351,"children":1352},{},[1353],{"type":40,"tag":167,"props":1354,"children":1355},{},[1356,1361],{"type":40,"tag":171,"props":1357,"children":1358},{},[1359],{"type":46,"value":1360},"Flag",{"type":40,"tag":171,"props":1362,"children":1363},{},[1364],{"type":46,"value":185},{"type":40,"tag":187,"props":1366,"children":1367},{},[1368,1391,1408,1430,1446,1462,1478,1494,1518],{"type":40,"tag":167,"props":1369,"children":1370},{},[1371,1380],{"type":40,"tag":194,"props":1372,"children":1373},{},[1374],{"type":40,"tag":55,"props":1375,"children":1377},{"className":1376},[],[1378],{"type":46,"value":1379},"--framework \u003CTFM>",{"type":40,"tag":194,"props":1381,"children":1382},{},[1383,1385,1390],{"type":46,"value":1384},"Target a specific framework in multi-TFM projects (e.g., ",{"type":40,"tag":55,"props":1386,"children":1388},{"className":1387},[],[1389],{"type":46,"value":248},{"type":46,"value":129},{"type":40,"tag":167,"props":1392,"children":1393},{},[1394,1403],{"type":40,"tag":194,"props":1395,"children":1396},{},[1397],{"type":40,"tag":55,"props":1398,"children":1400},{"className":1399},[],[1401],{"type":46,"value":1402},"--no-build",{"type":40,"tag":194,"props":1404,"children":1405},{},[1406],{"type":46,"value":1407},"Skip build, use previously built output",{"type":40,"tag":167,"props":1409,"children":1410},{},[1411,1420],{"type":40,"tag":194,"props":1412,"children":1413},{},[1414],{"type":40,"tag":55,"props":1415,"children":1417},{"className":1416},[],[1418],{"type":46,"value":1419},"--filter \u003CEXPRESSION>",{"type":40,"tag":194,"props":1421,"children":1422},{},[1423,1425,1429],{"type":46,"value":1424},"Run selected tests (see ",{"type":40,"tag":709,"props":1426,"children":1427},{"href":711},[1428],{"type":46,"value":714},{"type":46,"value":129},{"type":40,"tag":167,"props":1431,"children":1432},{},[1433,1441],{"type":40,"tag":194,"props":1434,"children":1435},{},[1436],{"type":40,"tag":55,"props":1437,"children":1439},{"className":1438},[],[1440],{"type":46,"value":300},{"type":40,"tag":194,"props":1442,"children":1443},{},[1444],{"type":46,"value":1445},"Generate TRX results file",{"type":40,"tag":167,"props":1447,"children":1448},{},[1449,1457],{"type":40,"tag":194,"props":1450,"children":1451},{},[1452],{"type":40,"tag":55,"props":1453,"children":1455},{"className":1454},[],[1456],{"type":46,"value":532},{"type":40,"tag":194,"props":1458,"children":1459},{},[1460],{"type":46,"value":1461},"Collect code coverage using Microsoft Code Coverage (built-in, always available)",{"type":40,"tag":167,"props":1463,"children":1464},{},[1465,1473],{"type":40,"tag":194,"props":1466,"children":1467},{},[1468],{"type":40,"tag":55,"props":1469,"children":1471},{"className":1470},[],[1472],{"type":46,"value":495},{"type":40,"tag":194,"props":1474,"children":1475},{},[1476],{"type":46,"value":1477},"Enable blame mode to detect tests that crash the host",{"type":40,"tag":167,"props":1479,"children":1480},{},[1481,1489],{"type":40,"tag":194,"props":1482,"children":1483},{},[1484],{"type":40,"tag":55,"props":1485,"children":1487},{"className":1486},[],[1488],{"type":46,"value":506},{"type":40,"tag":194,"props":1490,"children":1491},{},[1492],{"type":46,"value":1493},"Collect a crash dump when the test host crashes",{"type":40,"tag":167,"props":1495,"children":1496},{},[1497,1506],{"type":40,"tag":194,"props":1498,"children":1499},{},[1500],{"type":40,"tag":55,"props":1501,"children":1503},{"className":1502},[],[1504],{"type":46,"value":1505},"--blame-hang-timeout \u003Cduration>",{"type":40,"tag":194,"props":1507,"children":1508},{},[1509,1511,1517],{"type":46,"value":1510},"Abort test if it hangs longer than duration (e.g., ",{"type":40,"tag":55,"props":1512,"children":1514},{"className":1513},[],[1515],{"type":46,"value":1516},"5min",{"type":46,"value":129},{"type":40,"tag":167,"props":1519,"children":1520},{},[1521,1530],{"type":40,"tag":194,"props":1522,"children":1523},{},[1524],{"type":40,"tag":55,"props":1525,"children":1527},{"className":1526},[],[1528],{"type":46,"value":1529},"-v \u003Clevel>",{"type":40,"tag":194,"props":1531,"children":1532},{},[1533,1535,1541,1542,1548,1549,1555,1556,1562,1563],{"type":46,"value":1534},"Verbosity: ",{"type":40,"tag":55,"props":1536,"children":1538},{"className":1537},[],[1539],{"type":46,"value":1540},"quiet",{"type":46,"value":432},{"type":40,"tag":55,"props":1543,"children":1545},{"className":1544},[],[1546],{"type":46,"value":1547},"minimal",{"type":46,"value":432},{"type":40,"tag":55,"props":1550,"children":1552},{"className":1551},[],[1553],{"type":46,"value":1554},"normal",{"type":46,"value":432},{"type":40,"tag":55,"props":1557,"children":1559},{"className":1558},[],[1560],{"type":46,"value":1561},"detailed",{"type":46,"value":432},{"type":40,"tag":55,"props":1564,"children":1566},{"className":1565},[],[1567],{"type":46,"value":1568},"diagnostic",{"type":40,"tag":1224,"props":1570,"children":1572},{"id":1571},"mtp-with-net-sdk-8-or-9",[1573],{"type":46,"value":1574},"MTP with .NET SDK 8 or 9",{"type":40,"tag":49,"props":1576,"children":1577},{},[1578,1580,1586,1587,1592,1594,1599],{"type":46,"value":1579},"With ",{"type":40,"tag":55,"props":1581,"children":1583},{"className":1582},[],[1584],{"type":46,"value":1585},"\u003CTestingPlatformDotnetTestSupport>true\u003C\u002FTestingPlatformDotnetTestSupport>",{"type":46,"value":432},{"type":40,"tag":55,"props":1588,"children":1590},{"className":1589},[],[1591],{"type":46,"value":60},{"type":46,"value":1593}," bridges to MTP but uses VSTest-style argument parsing. MTP-specific arguments must be passed after ",{"type":40,"tag":55,"props":1595,"children":1597},{"className":1596},[],[1598],{"type":46,"value":388},{"type":46,"value":1600},":",{"type":40,"tag":1231,"props":1602,"children":1604},{"className":1233,"code":1603,"language":1235,"meta":1236,"style":1236},"dotnet test [\u003CPROJECT> | \u003CSOLUTION> | \u003CDIRECTORY> | \u003CDLL> | \u003CEXE>] -- \u003CMTP_ARGUMENTS>\n",[1605],{"type":40,"tag":55,"props":1606,"children":1607},{"__ignoreMap":1236},[1608],{"type":40,"tag":1242,"props":1609,"children":1610},{"class":1244,"line":1245},[1611,1615,1619,1623,1627,1631,1635,1639,1643,1647,1651,1655,1659,1663,1667,1671,1675,1679,1683,1687,1692,1697,1701,1706,1711],{"type":40,"tag":1242,"props":1612,"children":1613},{"style":1249},[1614],{"type":46,"value":8},{"type":40,"tag":1242,"props":1616,"children":1617},{"style":1254},[1618],{"type":46,"value":1257},{"type":40,"tag":1242,"props":1620,"children":1621},{"style":1260},[1622],{"type":46,"value":1263},{"type":40,"tag":1242,"props":1624,"children":1625},{"style":1266},[1626],{"type":46,"value":1269},{"type":40,"tag":1242,"props":1628,"children":1629},{"style":1266},[1630],{"type":46,"value":1274},{"type":40,"tag":1242,"props":1632,"children":1633},{"style":1249},[1634],{"type":46,"value":1279},{"type":40,"tag":1242,"props":1636,"children":1637},{"style":1260},[1638],{"type":46,"value":1284},{"type":40,"tag":1242,"props":1640,"children":1641},{"style":1266},[1642],{"type":46,"value":1269},{"type":40,"tag":1242,"props":1644,"children":1645},{"style":1266},[1646],{"type":46,"value":1274},{"type":40,"tag":1242,"props":1648,"children":1649},{"style":1249},[1650],{"type":46,"value":1297},{"type":40,"tag":1242,"props":1652,"children":1653},{"style":1260},[1654],{"type":46,"value":1284},{"type":40,"tag":1242,"props":1656,"children":1657},{"style":1266},[1658],{"type":46,"value":1269},{"type":40,"tag":1242,"props":1660,"children":1661},{"style":1266},[1662],{"type":46,"value":1274},{"type":40,"tag":1242,"props":1664,"children":1665},{"style":1249},[1666],{"type":46,"value":1314},{"type":40,"tag":1242,"props":1668,"children":1669},{"style":1260},[1670],{"type":46,"value":1284},{"type":40,"tag":1242,"props":1672,"children":1673},{"style":1266},[1674],{"type":46,"value":1269},{"type":40,"tag":1242,"props":1676,"children":1677},{"style":1266},[1678],{"type":46,"value":1274},{"type":40,"tag":1242,"props":1680,"children":1681},{"style":1249},[1682],{"type":46,"value":1331},{"type":40,"tag":1242,"props":1684,"children":1685},{"style":1260},[1686],{"type":46,"value":1336},{"type":40,"tag":1242,"props":1688,"children":1689},{"style":1254},[1690],{"type":46,"value":1691},"]",{"type":40,"tag":1242,"props":1693,"children":1694},{"style":1254},[1695],{"type":46,"value":1696}," --",{"type":40,"tag":1242,"props":1698,"children":1699},{"style":1266},[1700],{"type":46,"value":1274},{"type":40,"tag":1242,"props":1702,"children":1703},{"style":1254},[1704],{"type":46,"value":1705},"MTP_ARGUMENT",{"type":40,"tag":1242,"props":1707,"children":1708},{"style":1260},[1709],{"type":46,"value":1710},"S",{"type":40,"tag":1242,"props":1712,"children":1713},{"style":1266},[1714],{"type":46,"value":1715},">\n",{"type":40,"tag":1224,"props":1717,"children":1719},{"id":1718},"mtp-with-net-sdk-10",[1720],{"type":46,"value":1721},"MTP with .NET SDK 10+",{"type":40,"tag":49,"props":1723,"children":1724},{},[1725,1727,1732,1734,1740,1741,1746,1748,1753],{"type":46,"value":1726},"With the ",{"type":40,"tag":55,"props":1728,"children":1730},{"className":1729},[],[1731],{"type":46,"value":667},{"type":46,"value":1733}," runner set to ",{"type":40,"tag":55,"props":1735,"children":1737},{"className":1736},[],[1738],{"type":46,"value":1739},"Microsoft.Testing.Platform",{"type":46,"value":432},{"type":40,"tag":55,"props":1742,"children":1744},{"className":1743},[],[1745],{"type":46,"value":60},{"type":46,"value":1747}," natively understands MTP arguments without ",{"type":40,"tag":55,"props":1749,"children":1751},{"className":1750},[],[1752],{"type":46,"value":388},{"type":46,"value":1600},{"type":40,"tag":1231,"props":1755,"children":1757},{"className":1233,"code":1756,"language":1235,"meta":1236,"style":1236},"dotnet test\n    [--project \u003CPROJECT_OR_DIRECTORY>]\n    [--solution \u003CSOLUTION_OR_DIRECTORY>]\n    [--test-modules \u003CEXPRESSION>]\n    [\u003CMTP_ARGUMENTS>]\n",[1758],{"type":40,"tag":55,"props":1759,"children":1760},{"__ignoreMap":1236},[1761,1773,1802,1828,1854],{"type":40,"tag":1242,"props":1762,"children":1763},{"class":1244,"line":1245},[1764,1768],{"type":40,"tag":1242,"props":1765,"children":1766},{"style":1249},[1767],{"type":46,"value":8},{"type":40,"tag":1242,"props":1769,"children":1770},{"style":1254},[1771],{"type":46,"value":1772}," test\n",{"type":40,"tag":1242,"props":1774,"children":1776},{"class":1244,"line":1775},2,[1777,1782,1787,1792,1797],{"type":40,"tag":1242,"props":1778,"children":1779},{"style":1266},[1780],{"type":46,"value":1781},"    [",{"type":40,"tag":1242,"props":1783,"children":1784},{"style":1260},[1785],{"type":46,"value":1786},"--project ",{"type":40,"tag":1242,"props":1788,"children":1789},{"style":1266},[1790],{"type":46,"value":1791},"\u003C",{"type":40,"tag":1242,"props":1793,"children":1794},{"style":1260},[1795],{"type":46,"value":1796},"PROJECT_OR_DIRECTORY",{"type":40,"tag":1242,"props":1798,"children":1799},{"style":1266},[1800],{"type":46,"value":1801},">]\n",{"type":40,"tag":1242,"props":1803,"children":1805},{"class":1244,"line":1804},3,[1806,1810,1815,1819,1824],{"type":40,"tag":1242,"props":1807,"children":1808},{"style":1266},[1809],{"type":46,"value":1781},{"type":40,"tag":1242,"props":1811,"children":1812},{"style":1260},[1813],{"type":46,"value":1814},"--solution ",{"type":40,"tag":1242,"props":1816,"children":1817},{"style":1266},[1818],{"type":46,"value":1791},{"type":40,"tag":1242,"props":1820,"children":1821},{"style":1260},[1822],{"type":46,"value":1823},"SOLUTION_OR_DIRECTORY",{"type":40,"tag":1242,"props":1825,"children":1826},{"style":1266},[1827],{"type":46,"value":1801},{"type":40,"tag":1242,"props":1829,"children":1831},{"class":1244,"line":1830},4,[1832,1836,1841,1845,1850],{"type":40,"tag":1242,"props":1833,"children":1834},{"style":1266},[1835],{"type":46,"value":1781},{"type":40,"tag":1242,"props":1837,"children":1838},{"style":1260},[1839],{"type":46,"value":1840},"--test-modules ",{"type":40,"tag":1242,"props":1842,"children":1843},{"style":1266},[1844],{"type":46,"value":1791},{"type":40,"tag":1242,"props":1846,"children":1847},{"style":1260},[1848],{"type":46,"value":1849},"EXPRESSION",{"type":40,"tag":1242,"props":1851,"children":1852},{"style":1266},[1853],{"type":46,"value":1801},{"type":40,"tag":1242,"props":1855,"children":1857},{"class":1244,"line":1856},5,[1858,1863,1868],{"type":40,"tag":1242,"props":1859,"children":1860},{"style":1266},[1861],{"type":46,"value":1862},"    [\u003C",{"type":40,"tag":1242,"props":1864,"children":1865},{"style":1260},[1866],{"type":46,"value":1867},"MTP_ARGUMENTS",{"type":40,"tag":1242,"props":1869,"children":1870},{"style":1266},[1871],{"type":46,"value":1801},{"type":40,"tag":49,"props":1873,"children":1874},{},[1875],{"type":46,"value":1876},"Examples:",{"type":40,"tag":1231,"props":1878,"children":1880},{"className":1233,"code":1879,"language":1235,"meta":1236,"style":1236},"# Run all tests in a project\ndotnet test --project path\u002Fto\u002FMyTests.csproj\n\n# Run all tests in a directory containing a project\ndotnet test --project path\u002Fto\u002F\n\n# Run all tests in a solution (sln, slnf, slnx)\ndotnet test --solution path\u002Fto\u002FMySolution.sln\ndotnet test --solution path\u002Fto\u002FMySolution.slnf\ndotnet test --solution path\u002Fto\u002FMySolution.slnx\n\n# Run all tests in a directory containing a solution\ndotnet test --solution path\u002Fto\u002F\n\n# Run with MTP flags\ndotnet test --project path\u002Fto\u002FMyTests.csproj --report-trx --blame-hang-timeout 5min\n",[1881],{"type":40,"tag":55,"props":1882,"children":1883},{"__ignoreMap":1236},[1884,1893,1914,1923,1931,1951,1959,1968,1990,2011,2032,2040,2049,2069,2077,2086],{"type":40,"tag":1242,"props":1885,"children":1886},{"class":1244,"line":1245},[1887],{"type":40,"tag":1242,"props":1888,"children":1890},{"style":1889},"--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic",[1891],{"type":46,"value":1892},"# Run all tests in a project\n",{"type":40,"tag":1242,"props":1894,"children":1895},{"class":1244,"line":1775},[1896,1900,1904,1909],{"type":40,"tag":1242,"props":1897,"children":1898},{"style":1249},[1899],{"type":46,"value":8},{"type":40,"tag":1242,"props":1901,"children":1902},{"style":1254},[1903],{"type":46,"value":1257},{"type":40,"tag":1242,"props":1905,"children":1906},{"style":1254},[1907],{"type":46,"value":1908}," --project",{"type":40,"tag":1242,"props":1910,"children":1911},{"style":1254},[1912],{"type":46,"value":1913}," path\u002Fto\u002FMyTests.csproj\n",{"type":40,"tag":1242,"props":1915,"children":1916},{"class":1244,"line":1804},[1917],{"type":40,"tag":1242,"props":1918,"children":1920},{"emptyLinePlaceholder":1919},true,[1921],{"type":46,"value":1922},"\n",{"type":40,"tag":1242,"props":1924,"children":1925},{"class":1244,"line":1830},[1926],{"type":40,"tag":1242,"props":1927,"children":1928},{"style":1889},[1929],{"type":46,"value":1930},"# Run all tests in a directory containing a project\n",{"type":40,"tag":1242,"props":1932,"children":1933},{"class":1244,"line":1856},[1934,1938,1942,1946],{"type":40,"tag":1242,"props":1935,"children":1936},{"style":1249},[1937],{"type":46,"value":8},{"type":40,"tag":1242,"props":1939,"children":1940},{"style":1254},[1941],{"type":46,"value":1257},{"type":40,"tag":1242,"props":1943,"children":1944},{"style":1254},[1945],{"type":46,"value":1908},{"type":40,"tag":1242,"props":1947,"children":1948},{"style":1254},[1949],{"type":46,"value":1950}," path\u002Fto\u002F\n",{"type":40,"tag":1242,"props":1952,"children":1954},{"class":1244,"line":1953},6,[1955],{"type":40,"tag":1242,"props":1956,"children":1957},{"emptyLinePlaceholder":1919},[1958],{"type":46,"value":1922},{"type":40,"tag":1242,"props":1960,"children":1962},{"class":1244,"line":1961},7,[1963],{"type":40,"tag":1242,"props":1964,"children":1965},{"style":1889},[1966],{"type":46,"value":1967},"# Run all tests in a solution (sln, slnf, slnx)\n",{"type":40,"tag":1242,"props":1969,"children":1971},{"class":1244,"line":1970},8,[1972,1976,1980,1985],{"type":40,"tag":1242,"props":1973,"children":1974},{"style":1249},[1975],{"type":46,"value":8},{"type":40,"tag":1242,"props":1977,"children":1978},{"style":1254},[1979],{"type":46,"value":1257},{"type":40,"tag":1242,"props":1981,"children":1982},{"style":1254},[1983],{"type":46,"value":1984}," --solution",{"type":40,"tag":1242,"props":1986,"children":1987},{"style":1254},[1988],{"type":46,"value":1989}," path\u002Fto\u002FMySolution.sln\n",{"type":40,"tag":1242,"props":1991,"children":1993},{"class":1244,"line":1992},9,[1994,1998,2002,2006],{"type":40,"tag":1242,"props":1995,"children":1996},{"style":1249},[1997],{"type":46,"value":8},{"type":40,"tag":1242,"props":1999,"children":2000},{"style":1254},[2001],{"type":46,"value":1257},{"type":40,"tag":1242,"props":2003,"children":2004},{"style":1254},[2005],{"type":46,"value":1984},{"type":40,"tag":1242,"props":2007,"children":2008},{"style":1254},[2009],{"type":46,"value":2010}," path\u002Fto\u002FMySolution.slnf\n",{"type":40,"tag":1242,"props":2012,"children":2014},{"class":1244,"line":2013},10,[2015,2019,2023,2027],{"type":40,"tag":1242,"props":2016,"children":2017},{"style":1249},[2018],{"type":46,"value":8},{"type":40,"tag":1242,"props":2020,"children":2021},{"style":1254},[2022],{"type":46,"value":1257},{"type":40,"tag":1242,"props":2024,"children":2025},{"style":1254},[2026],{"type":46,"value":1984},{"type":40,"tag":1242,"props":2028,"children":2029},{"style":1254},[2030],{"type":46,"value":2031}," path\u002Fto\u002FMySolution.slnx\n",{"type":40,"tag":1242,"props":2033,"children":2035},{"class":1244,"line":2034},11,[2036],{"type":40,"tag":1242,"props":2037,"children":2038},{"emptyLinePlaceholder":1919},[2039],{"type":46,"value":1922},{"type":40,"tag":1242,"props":2041,"children":2043},{"class":1244,"line":2042},12,[2044],{"type":40,"tag":1242,"props":2045,"children":2046},{"style":1889},[2047],{"type":46,"value":2048},"# Run all tests in a directory containing a solution\n",{"type":40,"tag":1242,"props":2050,"children":2052},{"class":1244,"line":2051},13,[2053,2057,2061,2065],{"type":40,"tag":1242,"props":2054,"children":2055},{"style":1249},[2056],{"type":46,"value":8},{"type":40,"tag":1242,"props":2058,"children":2059},{"style":1254},[2060],{"type":46,"value":1257},{"type":40,"tag":1242,"props":2062,"children":2063},{"style":1254},[2064],{"type":46,"value":1984},{"type":40,"tag":1242,"props":2066,"children":2067},{"style":1254},[2068],{"type":46,"value":1950},{"type":40,"tag":1242,"props":2070,"children":2072},{"class":1244,"line":2071},14,[2073],{"type":40,"tag":1242,"props":2074,"children":2075},{"emptyLinePlaceholder":1919},[2076],{"type":46,"value":1922},{"type":40,"tag":1242,"props":2078,"children":2080},{"class":1244,"line":2079},15,[2081],{"type":40,"tag":1242,"props":2082,"children":2083},{"style":1889},[2084],{"type":46,"value":2085},"# Run with MTP flags\n",{"type":40,"tag":1242,"props":2087,"children":2089},{"class":1244,"line":2088},16,[2090,2094,2098,2102,2107,2112,2117],{"type":40,"tag":1242,"props":2091,"children":2092},{"style":1249},[2093],{"type":46,"value":8},{"type":40,"tag":1242,"props":2095,"children":2096},{"style":1254},[2097],{"type":46,"value":1257},{"type":40,"tag":1242,"props":2099,"children":2100},{"style":1254},[2101],{"type":46,"value":1908},{"type":40,"tag":1242,"props":2103,"children":2104},{"style":1254},[2105],{"type":46,"value":2106}," path\u002Fto\u002FMyTests.csproj",{"type":40,"tag":1242,"props":2108,"children":2109},{"style":1254},[2110],{"type":46,"value":2111}," --report-trx",{"type":40,"tag":1242,"props":2113,"children":2114},{"style":1254},[2115],{"type":46,"value":2116}," --blame-hang-timeout",{"type":40,"tag":1242,"props":2118,"children":2119},{"style":1254},[2120],{"type":46,"value":2121}," 5min\n",{"type":40,"tag":2123,"props":2124,"children":2125},"blockquote",{},[2126],{"type":40,"tag":49,"props":2127,"children":2128},{},[2129,2134,2136,2141,2143,2148,2150,2156,2157,2163,2165,2171],{"type":40,"tag":290,"props":2130,"children":2131},{},[2132],{"type":46,"value":2133},"Note",{"type":46,"value":2135},": The .NET 10+ ",{"type":40,"tag":55,"props":2137,"children":2139},{"className":2138},[],[2140],{"type":46,"value":60},{"type":46,"value":2142}," syntax does ",{"type":40,"tag":290,"props":2144,"children":2145},{},[2146],{"type":46,"value":2147},"not",{"type":46,"value":2149}," accept a bare positional argument like the VSTest syntax. Use ",{"type":40,"tag":55,"props":2151,"children":2153},{"className":2152},[],[2154],{"type":46,"value":2155},"--project",{"type":46,"value":432},{"type":40,"tag":55,"props":2158,"children":2160},{"className":2159},[],[2161],{"type":46,"value":2162},"--solution",{"type":46,"value":2164},", or ",{"type":40,"tag":55,"props":2166,"children":2168},{"className":2167},[],[2169],{"type":46,"value":2170},"--test-modules",{"type":46,"value":2172}," to specify the target.",{"type":40,"tag":1224,"props":2174,"children":2176},{"id":2175},"common-mtp-flags",[2177],{"type":46,"value":2178},"Common MTP flags",{"type":40,"tag":49,"props":2180,"children":2181},{},[2182,2184,2189],{"type":46,"value":2183},"These flags apply to MTP on both SDK versions. On SDK 8\u002F9, pass after ",{"type":40,"tag":55,"props":2185,"children":2187},{"className":2186},[],[2188],{"type":46,"value":388},{"type":46,"value":2190},"; on SDK 10+, pass directly.",{"type":40,"tag":2123,"props":2192,"children":2193},{},[2194],{"type":40,"tag":49,"props":2195,"children":2196},{},[2197,2202,2203,2208,2210,2215,2216,2221,2222,2228,2230,2236,2238,2243,2245,2255,2257,2262,2264,2270,2272,2277],{"type":40,"tag":290,"props":2198,"children":2199},{},[2200],{"type":46,"value":2201},"Important:",{"type":46,"value":803},{"type":40,"tag":55,"props":2204,"children":2206},{"className":2205},[],[2207],{"type":46,"value":60},{"type":46,"value":2209},"\u002FMSBuild flags such as ",{"type":40,"tag":55,"props":2211,"children":2213},{"className":2212},[],[2214],{"type":46,"value":705},{"type":46,"value":432},{"type":40,"tag":55,"props":2217,"children":2219},{"className":2218},[],[2220],{"type":46,"value":1402},{"type":46,"value":432},{"type":40,"tag":55,"props":2223,"children":2225},{"className":2224},[],[2226],{"type":46,"value":2227},"--configuration",{"type":46,"value":2229},", and ",{"type":40,"tag":55,"props":2231,"children":2233},{"className":2232},[],[2234],{"type":46,"value":2235},"--verbosity",{"type":46,"value":2237}," are consumed by ",{"type":40,"tag":55,"props":2239,"children":2241},{"className":2240},[],[2242],{"type":46,"value":60},{"type":46,"value":2244}," itself (they drive restore\u002Fbuild\u002Fhost selection) and ",{"type":40,"tag":290,"props":2246,"children":2247},{},[2248,2250],{"type":46,"value":2249},"always go BEFORE ",{"type":40,"tag":55,"props":2251,"children":2253},{"className":2252},[],[2254],{"type":46,"value":388},{"type":46,"value":2256},", regardless of platform or SDK. Only MTP test-platform arguments go after ",{"type":40,"tag":55,"props":2258,"children":2260},{"className":2259},[],[2261],{"type":46,"value":388},{"type":46,"value":2263}," on SDK 8\u002F9. For example: ",{"type":40,"tag":55,"props":2265,"children":2267},{"className":2266},[],[2268],{"type":46,"value":2269},"dotnet test --framework net9.0 -- --report-trx",{"type":46,"value":2271}," (built-in flag before ",{"type":40,"tag":55,"props":2273,"children":2275},{"className":2274},[],[2276],{"type":46,"value":388},{"type":46,"value":2278},", MTP extension flag after).",{"type":40,"tag":49,"props":2280,"children":2281},{},[2282],{"type":40,"tag":290,"props":2283,"children":2284},{},[2285],{"type":46,"value":2286},"Built-in flags (always available):",{"type":40,"tag":159,"props":2288,"children":2289},{},[2290,2304],{"type":40,"tag":163,"props":2291,"children":2292},{},[2293],{"type":40,"tag":167,"props":2294,"children":2295},{},[2296,2300],{"type":40,"tag":171,"props":2297,"children":2298},{},[2299],{"type":46,"value":1360},{"type":40,"tag":171,"props":2301,"children":2302},{},[2303],{"type":46,"value":185},{"type":40,"tag":187,"props":2305,"children":2306},{},[2307,2324,2341],{"type":40,"tag":167,"props":2308,"children":2309},{},[2310,2319],{"type":40,"tag":194,"props":2311,"children":2312},{},[2313],{"type":40,"tag":55,"props":2314,"children":2316},{"className":2315},[],[2317],{"type":46,"value":2318},"--results-directory \u003CDIR>",{"type":40,"tag":194,"props":2320,"children":2321},{},[2322],{"type":46,"value":2323},"Directory for test result output",{"type":40,"tag":167,"props":2325,"children":2326},{},[2327,2336],{"type":40,"tag":194,"props":2328,"children":2329},{},[2330],{"type":40,"tag":55,"props":2331,"children":2333},{"className":2332},[],[2334],{"type":46,"value":2335},"--diagnostic",{"type":40,"tag":194,"props":2337,"children":2338},{},[2339],{"type":46,"value":2340},"Enable diagnostic logging for the test platform",{"type":40,"tag":167,"props":2342,"children":2343},{},[2344,2353],{"type":40,"tag":194,"props":2345,"children":2346},{},[2347],{"type":40,"tag":55,"props":2348,"children":2350},{"className":2349},[],[2351],{"type":46,"value":2352},"--diagnostic-output-directory \u003CDIR>",{"type":40,"tag":194,"props":2354,"children":2355},{},[2356],{"type":46,"value":2357},"Directory for diagnostic log output",{"type":40,"tag":49,"props":2359,"children":2360},{},[2361],{"type":40,"tag":290,"props":2362,"children":2363},{},[2364],{"type":46,"value":2365},"Extension-dependent flags (require the corresponding extension package to be registered):",{"type":40,"tag":159,"props":2367,"children":2368},{},[2369,2388],{"type":40,"tag":163,"props":2370,"children":2371},{},[2372],{"type":40,"tag":167,"props":2373,"children":2374},{},[2375,2379,2384],{"type":40,"tag":171,"props":2376,"children":2377},{},[2378],{"type":46,"value":1360},{"type":40,"tag":171,"props":2380,"children":2381},{},[2382],{"type":46,"value":2383},"Requires",{"type":40,"tag":171,"props":2385,"children":2386},{},[2387],{"type":46,"value":185},{"type":40,"tag":187,"props":2389,"children":2390},{},[2391,2416,2440,2465,2495,2519],{"type":40,"tag":167,"props":2392,"children":2393},{},[2394,2402,2407],{"type":40,"tag":194,"props":2395,"children":2396},{},[2397],{"type":40,"tag":55,"props":2398,"children":2400},{"className":2399},[],[2401],{"type":46,"value":1419},{"type":40,"tag":194,"props":2403,"children":2404},{},[2405],{"type":46,"value":2406},"Framework-specific (not all frameworks support this)",{"type":40,"tag":194,"props":2408,"children":2409},{},[2410,2411,2415],{"type":46,"value":1424},{"type":40,"tag":709,"props":2412,"children":2413},{"href":711},[2414],{"type":46,"value":714},{"type":46,"value":129},{"type":40,"tag":167,"props":2417,"children":2418},{},[2419,2427,2436],{"type":40,"tag":194,"props":2420,"children":2421},{},[2422],{"type":40,"tag":55,"props":2423,"children":2425},{"className":2424},[],[2426],{"type":46,"value":313},{"type":40,"tag":194,"props":2428,"children":2429},{},[2430],{"type":40,"tag":55,"props":2431,"children":2433},{"className":2432},[],[2434],{"type":46,"value":2435},"Microsoft.Testing.Extensions.TrxReport",{"type":40,"tag":194,"props":2437,"children":2438},{},[2439],{"type":46,"value":1445},{"type":40,"tag":167,"props":2441,"children":2442},{},[2443,2452,2460],{"type":40,"tag":194,"props":2444,"children":2445},{},[2446],{"type":40,"tag":55,"props":2447,"children":2449},{"className":2448},[],[2450],{"type":46,"value":2451},"--report-trx-filename \u003CFILE>",{"type":40,"tag":194,"props":2453,"children":2454},{},[2455],{"type":40,"tag":55,"props":2456,"children":2458},{"className":2457},[],[2459],{"type":46,"value":2435},{"type":40,"tag":194,"props":2461,"children":2462},{},[2463],{"type":46,"value":2464},"Set TRX output filename",{"type":40,"tag":167,"props":2466,"children":2467},{},[2468,2476,2485],{"type":40,"tag":194,"props":2469,"children":2470},{},[2471],{"type":40,"tag":55,"props":2472,"children":2474},{"className":2473},[],[2475],{"type":46,"value":1505},{"type":40,"tag":194,"props":2477,"children":2478},{},[2479],{"type":40,"tag":55,"props":2480,"children":2482},{"className":2481},[],[2483],{"type":46,"value":2484},"Microsoft.Testing.Extensions.HangDump",{"type":40,"tag":194,"props":2486,"children":2487},{},[2488,2489,2494],{"type":46,"value":1510},{"type":40,"tag":55,"props":2490,"children":2492},{"className":2491},[],[2493],{"type":46,"value":1516},{"type":46,"value":129},{"type":40,"tag":167,"props":2496,"children":2497},{},[2498,2506,2515],{"type":40,"tag":194,"props":2499,"children":2500},{},[2501],{"type":40,"tag":55,"props":2502,"children":2504},{"className":2503},[],[2505],{"type":46,"value":506},{"type":40,"tag":194,"props":2507,"children":2508},{},[2509],{"type":40,"tag":55,"props":2510,"children":2512},{"className":2511},[],[2513],{"type":46,"value":2514},"Microsoft.Testing.Extensions.CrashDump",{"type":40,"tag":194,"props":2516,"children":2517},{},[2518],{"type":46,"value":1493},{"type":40,"tag":167,"props":2520,"children":2521},{},[2522,2530,2539],{"type":40,"tag":194,"props":2523,"children":2524},{},[2525],{"type":40,"tag":55,"props":2526,"children":2528},{"className":2527},[],[2529],{"type":46,"value":544},{"type":40,"tag":194,"props":2531,"children":2532},{},[2533],{"type":40,"tag":55,"props":2534,"children":2536},{"className":2535},[],[2537],{"type":46,"value":2538},"Microsoft.Testing.Extensions.CodeCoverage",{"type":40,"tag":194,"props":2540,"children":2541},{},[2542],{"type":46,"value":2543},"Collect code coverage using Microsoft Code Coverage",{"type":40,"tag":2123,"props":2545,"children":2546},{},[2547],{"type":40,"tag":49,"props":2548,"children":2549},{},[2550],{"type":46,"value":2551},"Some frameworks (e.g., MSTest) bundle common extensions by default. Others may require explicit package references. If a flag is not recognized, check that the corresponding extension package is referenced in the project.",{"type":40,"tag":1224,"props":2553,"children":2555},{"id":2554},"alternative-mtp-invocations",[2556],{"type":46,"value":2557},"Alternative MTP invocations",{"type":40,"tag":49,"props":2559,"children":2560},{},[2561,2563,2568],{"type":46,"value":2562},"MTP test projects are standalone executables. Beyond ",{"type":40,"tag":55,"props":2564,"children":2566},{"className":2565},[],[2567],{"type":46,"value":60},{"type":46,"value":2569},", they can be run directly:",{"type":40,"tag":1231,"props":2571,"children":2573},{"className":1233,"code":2572,"language":1235,"meta":1236,"style":1236},"# Build and run\ndotnet run --project \u003CPROJECT_PATH>\n\n# Run a previously built DLL\ndotnet exec \u003CPATH_TO_DLL>\n\n# Run the executable directly (Windows)\n\u003CPATH_TO_EXE>\n",[2574],{"type":40,"tag":55,"props":2575,"children":2576},{"__ignoreMap":1236},[2577,2585,2619,2626,2634,2664,2671,2679],{"type":40,"tag":1242,"props":2578,"children":2579},{"class":1244,"line":1245},[2580],{"type":40,"tag":1242,"props":2581,"children":2582},{"style":1889},[2583],{"type":46,"value":2584},"# Build and run\n",{"type":40,"tag":1242,"props":2586,"children":2587},{"class":1244,"line":1775},[2588,2592,2597,2601,2605,2610,2615],{"type":40,"tag":1242,"props":2589,"children":2590},{"style":1249},[2591],{"type":46,"value":8},{"type":40,"tag":1242,"props":2593,"children":2594},{"style":1254},[2595],{"type":46,"value":2596}," run",{"type":40,"tag":1242,"props":2598,"children":2599},{"style":1254},[2600],{"type":46,"value":1908},{"type":40,"tag":1242,"props":2602,"children":2603},{"style":1266},[2604],{"type":46,"value":1274},{"type":40,"tag":1242,"props":2606,"children":2607},{"style":1254},[2608],{"type":46,"value":2609},"PROJECT_PAT",{"type":40,"tag":1242,"props":2611,"children":2612},{"style":1260},[2613],{"type":46,"value":2614},"H",{"type":40,"tag":1242,"props":2616,"children":2617},{"style":1266},[2618],{"type":46,"value":1715},{"type":40,"tag":1242,"props":2620,"children":2621},{"class":1244,"line":1804},[2622],{"type":40,"tag":1242,"props":2623,"children":2624},{"emptyLinePlaceholder":1919},[2625],{"type":46,"value":1922},{"type":40,"tag":1242,"props":2627,"children":2628},{"class":1244,"line":1830},[2629],{"type":40,"tag":1242,"props":2630,"children":2631},{"style":1889},[2632],{"type":46,"value":2633},"# Run a previously built DLL\n",{"type":40,"tag":1242,"props":2635,"children":2636},{"class":1244,"line":1856},[2637,2641,2646,2650,2655,2660],{"type":40,"tag":1242,"props":2638,"children":2639},{"style":1249},[2640],{"type":46,"value":8},{"type":40,"tag":1242,"props":2642,"children":2643},{"style":1254},[2644],{"type":46,"value":2645}," exec",{"type":40,"tag":1242,"props":2647,"children":2648},{"style":1266},[2649],{"type":46,"value":1274},{"type":40,"tag":1242,"props":2651,"children":2652},{"style":1254},[2653],{"type":46,"value":2654},"PATH_TO_DL",{"type":40,"tag":1242,"props":2656,"children":2657},{"style":1260},[2658],{"type":46,"value":2659},"L",{"type":40,"tag":1242,"props":2661,"children":2662},{"style":1266},[2663],{"type":46,"value":1715},{"type":40,"tag":1242,"props":2665,"children":2666},{"class":1244,"line":1953},[2667],{"type":40,"tag":1242,"props":2668,"children":2669},{"emptyLinePlaceholder":1919},[2670],{"type":46,"value":1922},{"type":40,"tag":1242,"props":2672,"children":2673},{"class":1244,"line":1961},[2674],{"type":40,"tag":1242,"props":2675,"children":2676},{"style":1889},[2677],{"type":46,"value":2678},"# Run the executable directly (Windows)\n",{"type":40,"tag":1242,"props":2680,"children":2681},{"class":1244,"line":1970},[2682,2686,2691],{"type":40,"tag":1242,"props":2683,"children":2684},{"style":1266},[2685],{"type":46,"value":1791},{"type":40,"tag":1242,"props":2687,"children":2688},{"style":1260},[2689],{"type":46,"value":2690},"PATH_TO_EXE",{"type":40,"tag":1242,"props":2692,"children":2693},{"style":1266},[2694],{"type":46,"value":1715},{"type":40,"tag":49,"props":2696,"children":2697},{},[2698,2700,2705],{"type":46,"value":2699},"These alternative invocations accept MTP command line arguments directly (no ",{"type":40,"tag":55,"props":2701,"children":2703},{"className":2702},[],[2704],{"type":46,"value":388},{"type":46,"value":2706}," separator needed).",{"type":40,"tag":554,"props":2708,"children":2710},{"id":2709},"step-3-run-filtered-tests",[2711],{"type":46,"value":2712},"Step 3: Run filtered tests",{"type":40,"tag":49,"props":2714,"children":2715},{},[2716,2718,2724],{"type":46,"value":2717},"See the ",{"type":40,"tag":55,"props":2719,"children":2721},{"className":2720},[],[2722],{"type":46,"value":2723},"filter-syntax",{"type":46,"value":2725}," skill for the complete filter syntax for each platform and framework combination. Key points:",{"type":40,"tag":71,"props":2727,"children":2728},{},[2729,2775,2800,2882],{"type":40,"tag":75,"props":2730,"children":2731},{},[2732,2736,2738,2744,2746,2752,2753,2759,2760,2766,2767,2773],{"type":40,"tag":290,"props":2733,"children":2734},{},[2735],{"type":46,"value":594},{"type":46,"value":2737}," (MSTest, xUnit v2, NUnit): ",{"type":40,"tag":55,"props":2739,"children":2741},{"className":2740},[],[2742],{"type":46,"value":2743},"dotnet test --filter \u003CEXPRESSION>",{"type":46,"value":2745}," with ",{"type":40,"tag":55,"props":2747,"children":2749},{"className":2748},[],[2750],{"type":46,"value":2751},"=",{"type":46,"value":432},{"type":40,"tag":55,"props":2754,"children":2756},{"className":2755},[],[2757],{"type":46,"value":2758},"!=",{"type":46,"value":432},{"type":40,"tag":55,"props":2761,"children":2763},{"className":2762},[],[2764],{"type":46,"value":2765},"~",{"type":46,"value":432},{"type":40,"tag":55,"props":2768,"children":2770},{"className":2769},[],[2771],{"type":46,"value":2772},"!~",{"type":46,"value":2774}," operators",{"type":40,"tag":75,"props":2776,"children":2777},{},[2778,2783,2785,2791,2793,2798],{"type":40,"tag":290,"props":2779,"children":2780},{},[2781],{"type":46,"value":2782},"MTP -- MSTest and NUnit",{"type":46,"value":2784},": Same ",{"type":40,"tag":55,"props":2786,"children":2788},{"className":2787},[],[2789],{"type":46,"value":2790},"--filter",{"type":46,"value":2792}," syntax as VSTest; pass after ",{"type":40,"tag":55,"props":2794,"children":2796},{"className":2795},[],[2797],{"type":46,"value":388},{"type":46,"value":2799}," on SDK 8\u002F9, directly on SDK 10+",{"type":40,"tag":75,"props":2801,"children":2802},{},[2803,2808,2810,2815,2816,2821,2822,2827,2829,2834,2836,2842,2844,2850,2851,2857,2859,2865,2867,2873,2875,2880],{"type":40,"tag":290,"props":2804,"children":2805},{},[2806],{"type":46,"value":2807},"MTP -- xUnit v3",{"type":46,"value":2809},": Uses ",{"type":40,"tag":55,"props":2811,"children":2813},{"className":2812},[],[2814],{"type":46,"value":430},{"type":46,"value":432},{"type":40,"tag":55,"props":2817,"children":2819},{"className":2818},[],[2820],{"type":46,"value":438},{"type":46,"value":432},{"type":40,"tag":55,"props":2823,"children":2825},{"className":2824},[],[2826],{"type":46,"value":445},{"type":46,"value":2828}," (not VSTest expression syntax). For a ",{"type":40,"tag":290,"props":2830,"children":2831},{},[2832],{"type":46,"value":2833},"single combined expression",{"type":46,"value":2835}," (e.g., a class-name pattern AND a trait), use ",{"type":40,"tag":55,"props":2837,"children":2839},{"className":2838},[],[2840],{"type":46,"value":2841},"--filter-query",{"type":46,"value":2843}," with the xUnit v3 query filter language: path segments ",{"type":40,"tag":55,"props":2845,"children":2847},{"className":2846},[],[2848],{"type":46,"value":2849},"\u002F\u003Cassembly>\u002F\u003Cnamespace>\u002F\u003Cclass>\u002F\u003Cmethod>",{"type":46,"value":2745},{"type":40,"tag":55,"props":2852,"children":2854},{"className":2853},[],[2855],{"type":46,"value":2856},"*",{"type":46,"value":2858}," wildcards and a ",{"type":40,"tag":55,"props":2860,"children":2862},{"className":2861},[],[2863],{"type":46,"value":2864},"[Trait=Value]",{"type":46,"value":2866}," qualifier — for example ",{"type":40,"tag":55,"props":2868,"children":2870},{"className":2869},[],[2871],{"type":46,"value":2872},"dotnet test -- --filter-query \"\u002F*\u002F*\u002F*IntegrationTests*\u002F*[Category=Smoke]\"",{"type":46,"value":2874},". See the ",{"type":40,"tag":55,"props":2876,"children":2878},{"className":2877},[],[2879],{"type":46,"value":2723},{"type":46,"value":2881}," skill for the full query language.",{"type":40,"tag":75,"props":2883,"children":2884},{},[2885,2890,2891,2897],{"type":40,"tag":290,"props":2886,"children":2887},{},[2888],{"type":46,"value":2889},"MTP -- TUnit",{"type":46,"value":2809},{"type":40,"tag":55,"props":2892,"children":2894},{"className":2893},[],[2895],{"type":46,"value":2896},"--treenode-filter",{"type":46,"value":2898}," with path-based syntax",{"type":40,"tag":1224,"props":2900,"children":2902},{"id":2901},"when-the-user-names-a-test-category-trait-or-group",[2903],{"type":46,"value":2904},"When the user names a test category, trait, or group",{"type":40,"tag":49,"props":2906,"children":2907},{},[2908,2910,2915],{"type":46,"value":2909},"When the prompt names a subset of tests by category (e.g., \"integration tests\", \"unit tests\", \"smoke tests\", \"fast tests\"), ",{"type":40,"tag":290,"props":2911,"children":2912},{},[2913],{"type":46,"value":2914},"do not run all tests",{"type":46,"value":2916}," — translate the user's vocabulary into the platform-appropriate filter:",{"type":40,"tag":724,"props":2918,"children":2919},{},[2920,3089,3248],{"type":40,"tag":75,"props":2921,"children":2922},{},[2923,2928,2930],{"type":40,"tag":290,"props":2924,"children":2925},{},[2926],{"type":46,"value":2927},"Inspect the test source files",{"type":46,"value":2929}," for filter-attribute annotations that match the named group:",{"type":40,"tag":159,"props":2931,"children":2932},{},[2933,2954],{"type":40,"tag":163,"props":2934,"children":2935},{},[2936],{"type":40,"tag":167,"props":2937,"children":2938},{},[2939,2944,2949],{"type":40,"tag":171,"props":2940,"children":2941},{},[2942],{"type":46,"value":2943},"Framework",{"type":40,"tag":171,"props":2945,"children":2946},{},[2947],{"type":46,"value":2948},"Attribute",{"type":40,"tag":171,"props":2950,"children":2951},{},[2952],{"type":46,"value":2953},"Filter property",{"type":40,"tag":187,"props":2955,"children":2956},{},[2957,2982,3008,3034,3066],{"type":40,"tag":167,"props":2958,"children":2959},{},[2960,2964,2973],{"type":40,"tag":194,"props":2961,"children":2962},{},[2963],{"type":46,"value":980},{"type":40,"tag":194,"props":2965,"children":2966},{},[2967],{"type":40,"tag":55,"props":2968,"children":2970},{"className":2969},[],[2971],{"type":46,"value":2972},"[TestCategory(\"Integration\")]",{"type":40,"tag":194,"props":2974,"children":2975},{},[2976],{"type":40,"tag":55,"props":2977,"children":2979},{"className":2978},[],[2980],{"type":46,"value":2981},"TestCategory",{"type":40,"tag":167,"props":2983,"children":2984},{},[2985,2989,2998],{"type":40,"tag":194,"props":2986,"children":2987},{},[2988],{"type":46,"value":994},{"type":40,"tag":194,"props":2990,"children":2991},{},[2992],{"type":40,"tag":55,"props":2993,"children":2995},{"className":2994},[],[2996],{"type":46,"value":2997},"[Category(\"Integration\")]",{"type":40,"tag":194,"props":2999,"children":3000},{},[3001,3006],{"type":40,"tag":55,"props":3002,"children":3004},{"className":3003},[],[3005],{"type":46,"value":2981},{"type":46,"value":3007}," (mapped)",{"type":40,"tag":167,"props":3009,"children":3010},{},[3011,3016,3025],{"type":40,"tag":194,"props":3012,"children":3013},{},[3014],{"type":46,"value":3015},"xUnit v2",{"type":40,"tag":194,"props":3017,"children":3018},{},[3019],{"type":40,"tag":55,"props":3020,"children":3022},{"className":3021},[],[3023],{"type":46,"value":3024},"[Trait(\"Category\", \"Integration\")]",{"type":40,"tag":194,"props":3026,"children":3027},{},[3028],{"type":40,"tag":55,"props":3029,"children":3031},{"className":3030},[],[3032],{"type":46,"value":3033},"Category",{"type":40,"tag":167,"props":3035,"children":3036},{},[3037,3042,3050],{"type":40,"tag":194,"props":3038,"children":3039},{},[3040],{"type":46,"value":3041},"xUnit v3",{"type":40,"tag":194,"props":3043,"children":3044},{},[3045],{"type":40,"tag":55,"props":3046,"children":3048},{"className":3047},[],[3049],{"type":46,"value":3024},{"type":40,"tag":194,"props":3051,"children":3052},{},[3053,3058,3060,3065],{"type":40,"tag":55,"props":3054,"children":3056},{"className":3055},[],[3057],{"type":46,"value":3033},{"type":46,"value":3059}," (use ",{"type":40,"tag":55,"props":3061,"children":3063},{"className":3062},[],[3064],{"type":46,"value":445},{"type":46,"value":129},{"type":40,"tag":167,"props":3067,"children":3068},{},[3069,3073,3081],{"type":40,"tag":194,"props":3070,"children":3071},{},[3072],{"type":46,"value":1001},{"type":40,"tag":194,"props":3074,"children":3075},{},[3076],{"type":40,"tag":55,"props":3077,"children":3079},{"className":3078},[],[3080],{"type":46,"value":2997},{"type":40,"tag":194,"props":3082,"children":3083},{},[3084],{"type":40,"tag":55,"props":3085,"children":3087},{"className":3086},[],[3088],{"type":46,"value":3033},{"type":40,"tag":75,"props":3090,"children":3091},{},[3092,3097,3099],{"type":40,"tag":290,"props":3093,"children":3094},{},[3095],{"type":46,"value":3096},"Build the filter expression",{"type":46,"value":3098}," and combine it with the platform-correct invocation. For \"run the integration tests\" against an MSTest project:",{"type":40,"tag":159,"props":3100,"children":3101},{},[3102,3121],{"type":40,"tag":163,"props":3103,"children":3104},{},[3105],{"type":40,"tag":167,"props":3106,"children":3107},{},[3108,3112,3116],{"type":40,"tag":171,"props":3109,"children":3110},{},[3111],{"type":46,"value":573},{"type":40,"tag":171,"props":3113,"children":3114},{},[3115],{"type":46,"value":578},{"type":40,"tag":171,"props":3117,"children":3118},{},[3119],{"type":46,"value":3120},"Command",{"type":40,"tag":187,"props":3122,"children":3123},{},[3124,3146,3167,3186,3207,3227],{"type":40,"tag":167,"props":3125,"children":3126},{},[3127,3132,3137],{"type":40,"tag":194,"props":3128,"children":3129},{},[3130],{"type":46,"value":3131},"VSTest (MSTest)",{"type":40,"tag":194,"props":3133,"children":3134},{},[3135],{"type":46,"value":3136},"any",{"type":40,"tag":194,"props":3138,"children":3139},{},[3140],{"type":40,"tag":55,"props":3141,"children":3143},{"className":3142},[],[3144],{"type":46,"value":3145},"dotnet test --filter \"TestCategory=Integration\"",{"type":40,"tag":167,"props":3147,"children":3148},{},[3149,3154,3158],{"type":40,"tag":194,"props":3150,"children":3151},{},[3152],{"type":46,"value":3153},"MTP (MSTest)",{"type":40,"tag":194,"props":3155,"children":3156},{},[3157],{"type":46,"value":621},{"type":40,"tag":194,"props":3159,"children":3160},{},[3161],{"type":40,"tag":55,"props":3162,"children":3164},{"className":3163},[],[3165],{"type":46,"value":3166},"dotnet test -- --filter \"TestCategory=Integration\"",{"type":40,"tag":167,"props":3168,"children":3169},{},[3170,3174,3178],{"type":40,"tag":194,"props":3171,"children":3172},{},[3173],{"type":46,"value":3153},{"type":40,"tag":194,"props":3175,"children":3176},{},[3177],{"type":46,"value":642},{"type":40,"tag":194,"props":3179,"children":3180},{},[3181],{"type":40,"tag":55,"props":3182,"children":3184},{"className":3183},[],[3185],{"type":46,"value":3145},{"type":40,"tag":167,"props":3187,"children":3188},{},[3189,3194,3198],{"type":40,"tag":194,"props":3190,"children":3191},{},[3192],{"type":46,"value":3193},"MTP (xUnit v3)",{"type":40,"tag":194,"props":3195,"children":3196},{},[3197],{"type":46,"value":621},{"type":40,"tag":194,"props":3199,"children":3200},{},[3201],{"type":40,"tag":55,"props":3202,"children":3204},{"className":3203},[],[3205],{"type":46,"value":3206},"dotnet test -- --filter-trait \"Category=Integration\"",{"type":40,"tag":167,"props":3208,"children":3209},{},[3210,3214,3218],{"type":40,"tag":194,"props":3211,"children":3212},{},[3213],{"type":46,"value":3193},{"type":40,"tag":194,"props":3215,"children":3216},{},[3217],{"type":46,"value":642},{"type":40,"tag":194,"props":3219,"children":3220},{},[3221],{"type":40,"tag":55,"props":3222,"children":3224},{"className":3223},[],[3225],{"type":46,"value":3226},"dotnet test --filter-trait \"Category=Integration\"",{"type":40,"tag":167,"props":3228,"children":3229},{},[3230,3235,3239],{"type":40,"tag":194,"props":3231,"children":3232},{},[3233],{"type":46,"value":3234},"MTP (TUnit)",{"type":40,"tag":194,"props":3236,"children":3237},{},[3238],{"type":46,"value":621},{"type":40,"tag":194,"props":3240,"children":3241},{},[3242],{"type":40,"tag":55,"props":3243,"children":3245},{"className":3244},[],[3246],{"type":46,"value":3247},"dotnet test -- --treenode-filter \"\u002F*\u002F*\u002F*\u002F*[Category=Integration]\"",{"type":40,"tag":75,"props":3249,"children":3250},{},[3251,3253,3259],{"type":46,"value":3252},"If you cannot find a matching attribute, ask the user to confirm the category name or fall back to a name-pattern filter (e.g., ",{"type":40,"tag":55,"props":3254,"children":3256},{"className":3255},[],[3257],{"type":46,"value":3258},"--filter \"FullyQualifiedName~Integration\"",{"type":46,"value":3260},").",{"type":40,"tag":64,"props":3262,"children":3264},{"id":3263},"validation",[3265],{"type":46,"value":3266},"Validation",{"type":40,"tag":71,"props":3268,"children":3271},{"className":3269},[3270],"contains-task-list",[3272,3284,3293,3309,3318,3327],{"type":40,"tag":75,"props":3273,"children":3276},{"className":3274},[3275],"task-list-item",[3277,3282],{"type":40,"tag":3278,"props":3279,"children":3281},"input",{"disabled":1919,"type":3280},"checkbox",[],{"type":46,"value":3283}," Test platform (VSTest or MTP) was correctly identified",{"type":40,"tag":75,"props":3285,"children":3287},{"className":3286},[3275],[3288,3291],{"type":40,"tag":3278,"props":3289,"children":3290},{"disabled":1919,"type":3280},[],{"type":46,"value":3292}," Test framework (MSTest, xUnit, NUnit, TUnit) was correctly identified",{"type":40,"tag":75,"props":3294,"children":3296},{"className":3295},[3275],[3297,3300,3302,3307],{"type":40,"tag":3278,"props":3298,"children":3299},{"disabled":1919,"type":3280},[],{"type":46,"value":3301}," Correct ",{"type":40,"tag":55,"props":3303,"children":3305},{"className":3304},[],[3306],{"type":46,"value":60},{"type":46,"value":3308}," invocation was used for the detected platform and SDK version",{"type":40,"tag":75,"props":3310,"children":3312},{"className":3311},[3275],[3313,3316],{"type":40,"tag":3278,"props":3314,"children":3315},{"disabled":1919,"type":3280},[],{"type":46,"value":3317}," When the user named a test category\u002Ftrait\u002Fgroup, the appropriate filter was applied (not \"run all tests\")",{"type":40,"tag":75,"props":3319,"children":3321},{"className":3320},[3275],[3322,3325],{"type":40,"tag":3278,"props":3323,"children":3324},{"disabled":1919,"type":3280},[],{"type":46,"value":3326}," Filter expressions used the syntax appropriate for the platform and framework",{"type":40,"tag":75,"props":3328,"children":3330},{"className":3329},[3275],[3331,3334],{"type":40,"tag":3278,"props":3332,"children":3333},{"disabled":1919,"type":3280},[],{"type":46,"value":3335}," Test results were clearly reported to the user",{"type":40,"tag":64,"props":3337,"children":3339},{"id":3338},"common-pitfalls",[3340],{"type":46,"value":3341},"Common Pitfalls",{"type":40,"tag":159,"props":3343,"children":3344},{},[3345,3361],{"type":40,"tag":163,"props":3346,"children":3347},{},[3348],{"type":40,"tag":167,"props":3349,"children":3350},{},[3351,3356],{"type":40,"tag":171,"props":3352,"children":3353},{},[3354],{"type":46,"value":3355},"Pitfall",{"type":40,"tag":171,"props":3357,"children":3358},{},[3359],{"type":46,"value":3360},"Solution",{"type":40,"tag":187,"props":3362,"children":3363},{},[3364,3390,3422,3454,3481,3507,3540],{"type":40,"tag":167,"props":3365,"children":3366},{},[3367,3379],{"type":40,"tag":194,"props":3368,"children":3369},{},[3370,3372,3377],{"type":46,"value":3371},"Missing ",{"type":40,"tag":55,"props":3373,"children":3375},{"className":3374},[],[3376],{"type":46,"value":1028},{"type":46,"value":3378}," in a VSTest project",{"type":40,"tag":194,"props":3380,"children":3381},{},[3382,3384],{"type":46,"value":3383},"Tests won't be discovered. Add ",{"type":40,"tag":55,"props":3385,"children":3387},{"className":3386},[],[3388],{"type":46,"value":3389},"\u003CPackageReference Include=\"Microsoft.NET.Test.Sdk\" \u002F>",{"type":40,"tag":167,"props":3391,"children":3392},{},[3393,3405],{"type":40,"tag":194,"props":3394,"children":3395},{},[3396,3398,3403],{"type":46,"value":3397},"Using VSTest ",{"type":40,"tag":55,"props":3399,"children":3401},{"className":3400},[],[3402],{"type":46,"value":2790},{"type":46,"value":3404}," syntax with xUnit v3 on MTP",{"type":40,"tag":194,"props":3406,"children":3407},{},[3408,3409,3414,3415,3420],{"type":46,"value":424},{"type":40,"tag":55,"props":3410,"children":3412},{"className":3411},[],[3413],{"type":46,"value":430},{"type":46,"value":432},{"type":40,"tag":55,"props":3416,"children":3418},{"className":3417},[],[3419],{"type":46,"value":438},{"type":46,"value":3421},", etc. -- not the VSTest expression syntax",{"type":40,"tag":167,"props":3423,"children":3424},{},[3425,3437],{"type":40,"tag":194,"props":3426,"children":3427},{},[3428,3430,3435],{"type":46,"value":3429},"Passing MTP args without ",{"type":40,"tag":55,"props":3431,"children":3433},{"className":3432},[],[3434],{"type":46,"value":388},{"type":46,"value":3436}," on .NET SDK 8\u002F9",{"type":40,"tag":194,"props":3438,"children":3439},{},[3440,3442,3447,3449],{"type":46,"value":3441},"Before .NET 10, MTP args must go after ",{"type":40,"tag":55,"props":3443,"children":3445},{"className":3444},[],[3446],{"type":46,"value":388},{"type":46,"value":3448},": ",{"type":40,"tag":55,"props":3450,"children":3452},{"className":3451},[],[3453],{"type":46,"value":401},{"type":40,"tag":167,"props":3455,"children":3456},{},[3457,3469],{"type":40,"tag":194,"props":3458,"children":3459},{},[3460,3462,3467],{"type":46,"value":3461},"Using ",{"type":40,"tag":55,"props":3463,"children":3465},{"className":3464},[],[3466],{"type":46,"value":358},{"type":46,"value":3468}," separator on .NET SDK 10+",{"type":40,"tag":194,"props":3470,"children":3471},{},[3472,3474,3479],{"type":46,"value":3473},"SDK 10+ passes MTP args directly — do NOT use ",{"type":40,"tag":55,"props":3475,"children":3477},{"className":3476},[],[3478],{"type":46,"value":388},{"type":46,"value":3480}," separator",{"type":40,"tag":167,"props":3482,"children":3483},{},[3484,3502],{"type":40,"tag":194,"props":3485,"children":3486},{},[3487,3488,3493,3495,3500],{"type":46,"value":3461},{"type":40,"tag":55,"props":3489,"children":3491},{"className":3490},[],[3492],{"type":46,"value":300},{"type":46,"value":3494}," for MTP or ",{"type":40,"tag":55,"props":3496,"children":3498},{"className":3497},[],[3499],{"type":46,"value":313},{"type":46,"value":3501}," for VSTest",{"type":40,"tag":194,"props":3503,"children":3504},{},[3505],{"type":46,"value":3506},"Each platform has its own TRX flag — check the Critical Rules table",{"type":40,"tag":167,"props":3508,"children":3509},{},[3510,3522],{"type":40,"tag":194,"props":3511,"children":3512},{},[3513,3515,3520],{"type":46,"value":3514},"Only checking ",{"type":40,"tag":55,"props":3516,"children":3518},{"className":3517},[],[3519],{"type":46,"value":675},{"type":46,"value":3521}," for MTP signals",{"type":40,"tag":194,"props":3523,"children":3524},{},[3525,3527,3532,3533,3538],{"type":46,"value":3526},"Always check ",{"type":40,"tag":55,"props":3528,"children":3530},{"className":3529},[],[3531],{"type":46,"value":682},{"type":46,"value":508},{"type":40,"tag":55,"props":3534,"children":3536},{"className":3535},[],[3537],{"type":46,"value":689},{"type":46,"value":3539}," too — MTP properties are frequently set there",{"type":40,"tag":167,"props":3541,"children":3542},{},[3543,3548],{"type":40,"tag":194,"props":3544,"children":3545},{},[3546],{"type":46,"value":3547},"Using bare positional path argument on SDK 10+",{"type":40,"tag":194,"props":3549,"children":3550},{},[3551,3553,3558,3559],{"type":46,"value":3552},"SDK 10+ requires named flags: ",{"type":40,"tag":55,"props":3554,"children":3556},{"className":3555},[],[3557],{"type":46,"value":469},{"type":46,"value":471},{"type":40,"tag":55,"props":3560,"children":3562},{"className":3561},[],[3563],{"type":46,"value":477},{"type":40,"tag":64,"props":3565,"children":3567},{"id":3566},"troubleshooting",[3568],{"type":46,"value":3569},"Troubleshooting",{"type":40,"tag":49,"props":3571,"children":3572},{},[3573],{"type":46,"value":3574},"Common error messages and how to resolve them:",{"type":40,"tag":159,"props":3576,"children":3577},{},[3578,3599],{"type":40,"tag":163,"props":3579,"children":3580},{},[3581],{"type":40,"tag":167,"props":3582,"children":3583},{},[3584,3589,3594],{"type":40,"tag":171,"props":3585,"children":3586},{},[3587],{"type":46,"value":3588},"Error",{"type":40,"tag":171,"props":3590,"children":3591},{},[3592],{"type":46,"value":3593},"Cause",{"type":40,"tag":171,"props":3595,"children":3596},{},[3597],{"type":46,"value":3598},"Fix",{"type":40,"tag":187,"props":3600,"children":3601},{},[3602,3638,3674,3701,3737,3773,3824,3856,3892,3914,3943],{"type":40,"tag":167,"props":3603,"children":3604},{},[3605,3621,3626],{"type":40,"tag":194,"props":3606,"children":3607},{},[3608,3614,3615],{"type":40,"tag":55,"props":3609,"children":3611},{"className":3610},[],[3612],{"type":46,"value":3613},"No test is available",{"type":46,"value":471},{"type":40,"tag":55,"props":3616,"children":3618},{"className":3617},[],[3619],{"type":46,"value":3620},"No test matches the given testcase filter",{"type":40,"tag":194,"props":3622,"children":3623},{},[3624],{"type":46,"value":3625},"Wrong filter syntax for the platform\u002Fframework, or tests not discovered",{"type":40,"tag":194,"props":3627,"children":3628},{},[3629,3631,3636],{"type":46,"value":3630},"Verify filter syntax matches the platform (see ",{"type":40,"tag":55,"props":3632,"children":3634},{"className":3633},[],[3635],{"type":46,"value":2723},{"type":46,"value":3637}," skill). For discovery issues, check that the test SDK and adapter packages are installed",{"type":40,"tag":167,"props":3639,"children":3640},{},[3641,3650,3655],{"type":40,"tag":194,"props":3642,"children":3643},{},[3644],{"type":40,"tag":55,"props":3645,"children":3647},{"className":3646},[],[3648],{"type":46,"value":3649},"The --report-trx option is unrecognized",{"type":40,"tag":194,"props":3651,"children":3652},{},[3653],{"type":46,"value":3654},"MTP extension package not referenced, or using MTP flag on a VSTest project",{"type":40,"tag":194,"props":3656,"children":3657},{},[3658,3660,3666,3668,3673],{"type":46,"value":3659},"Add ",{"type":40,"tag":55,"props":3661,"children":3663},{"className":3662},[],[3664],{"type":46,"value":3665},"\u003CPackageReference Include=\"Microsoft.Testing.Extensions.TrxReport\" \u002F>",{"type":46,"value":3667}," for MTP, or use ",{"type":40,"tag":55,"props":3669,"children":3671},{"className":3670},[],[3672],{"type":46,"value":300},{"type":46,"value":3501},{"type":40,"tag":167,"props":3675,"children":3676},{},[3677,3686,3691],{"type":40,"tag":194,"props":3678,"children":3679},{},[3680],{"type":40,"tag":55,"props":3681,"children":3683},{"className":3682},[],[3684],{"type":46,"value":3685},"The --blame-hang-timeout option is unrecognized",{"type":40,"tag":194,"props":3687,"children":3688},{},[3689],{"type":46,"value":3690},"Missing HangDump extension on MTP",{"type":40,"tag":194,"props":3692,"children":3693},{},[3694,3695],{"type":46,"value":3659},{"type":40,"tag":55,"props":3696,"children":3698},{"className":3697},[],[3699],{"type":46,"value":3700},"\u003CPackageReference Include=\"Microsoft.Testing.Extensions.HangDump\" \u002F>",{"type":40,"tag":167,"props":3702,"children":3703},{},[3704,3713,3725],{"type":40,"tag":194,"props":3705,"children":3706},{},[3707],{"type":40,"tag":55,"props":3708,"children":3710},{"className":3709},[],[3711],{"type":46,"value":3712},"error NETSDK1045: The current .NET SDK does not support targeting .NET X.0",{"type":40,"tag":194,"props":3714,"children":3715},{},[3716,3718,3723],{"type":46,"value":3717},"SDK version in ",{"type":40,"tag":55,"props":3719,"children":3721},{"className":3720},[],[3722],{"type":46,"value":667},{"type":46,"value":3724}," doesn't match the project's target framework",{"type":40,"tag":194,"props":3726,"children":3727},{},[3728,3730,3735],{"type":46,"value":3729},"Update ",{"type":40,"tag":55,"props":3731,"children":3733},{"className":3732},[],[3734],{"type":46,"value":667},{"type":46,"value":3736}," SDK version or install the required SDK",{"type":40,"tag":167,"props":3738,"children":3739},{},[3740,3749,3754],{"type":40,"tag":194,"props":3741,"children":3742},{},[3743],{"type":40,"tag":55,"props":3744,"children":3746},{"className":3745},[],[3747],{"type":46,"value":3748},"The test runner process exited with non-zero exit code",{"type":40,"tag":194,"props":3750,"children":3751},{},[3752],{"type":46,"value":3753},"MTP test host crashed or test failure",{"type":40,"tag":194,"props":3755,"children":3756},{},[3757,3759,3764,3766,3771],{"type":46,"value":3758},"Run with ",{"type":40,"tag":55,"props":3760,"children":3762},{"className":3761},[],[3763],{"type":46,"value":506},{"type":46,"value":3765}," (MTP) or ",{"type":40,"tag":55,"props":3767,"children":3769},{"className":3768},[],[3770],{"type":46,"value":495},{"type":46,"value":3772}," (VSTest) to collect a crash dump for diagnosis",{"type":40,"tag":167,"props":3774,"children":3775},{},[3776,3793,3803],{"type":40,"tag":194,"props":3777,"children":3778},{},[3779,3785,3787],{"type":40,"tag":55,"props":3780,"children":3782},{"className":3781},[],[3783],{"type":46,"value":3784},"No test source files were found",{"type":46,"value":3786}," \u002F ",{"type":40,"tag":55,"props":3788,"children":3790},{"className":3789},[],[3791],{"type":46,"value":3792},"No test project found",{"type":40,"tag":194,"props":3794,"children":3795},{},[3796,3801],{"type":40,"tag":55,"props":3797,"children":3799},{"className":3798},[],[3800],{"type":46,"value":60},{"type":46,"value":3802}," can't find a test project in the given path",{"type":40,"tag":194,"props":3804,"children":3805},{},[3806,3808,3814,3816,3822],{"type":46,"value":3807},"Specify the path explicitly: ",{"type":40,"tag":55,"props":3809,"children":3811},{"className":3810},[],[3812],{"type":46,"value":3813},"dotnet test \u003Cpath\u002Fto\u002Fproject.csproj>",{"type":46,"value":3815}," (VSTest) or ",{"type":40,"tag":55,"props":3817,"children":3819},{"className":3818},[],[3820],{"type":46,"value":3821},"dotnet test --project \u003Cpath>",{"type":46,"value":3823}," (SDK 10+)",{"type":40,"tag":167,"props":3825,"children":3826},{},[3827,3832,3837],{"type":40,"tag":194,"props":3828,"children":3829},{},[3830],{"type":46,"value":3831},"Tests discovered but 0 executed",{"type":40,"tag":194,"props":3833,"children":3834},{},[3835],{"type":46,"value":3836},"Filter expression matches no tests",{"type":40,"tag":194,"props":3838,"children":3839},{},[3840,3842,3847,3849,3854],{"type":46,"value":3841},"Double-check filter property names and values. Common typo: ",{"type":40,"tag":55,"props":3843,"children":3845},{"className":3844},[],[3846],{"type":46,"value":2981},{"type":46,"value":3848}," (MSTest) vs ",{"type":40,"tag":55,"props":3850,"children":3852},{"className":3851},[],[3853],{"type":46,"value":3033},{"type":46,"value":3855}," (NUnit) vs trait syntax (xUnit)",{"type":40,"tag":167,"props":3857,"children":3858},{},[3859,3870,3889],{"type":40,"tag":194,"props":3860,"children":3861},{},[3862,3863,3868],{"type":46,"value":3461},{"type":40,"tag":55,"props":3864,"children":3866},{"className":3865},[],[3867],{"type":46,"value":388},{"type":46,"value":3869}," for MTP args on .NET SDK 10+",{"type":40,"tag":194,"props":3871,"children":3872},{},[3873,3875,3881,3883],{"type":46,"value":3874},"On .NET 10+, MTP args are passed directly: ",{"type":40,"tag":55,"props":3876,"children":3878},{"className":3877},[],[3879],{"type":46,"value":3880},"dotnet test --project . --blame-hang-timeout 5min",{"type":46,"value":3882}," — do NOT use ",{"type":40,"tag":55,"props":3884,"children":3886},{"className":3885},[],[3887],{"type":46,"value":3888},"-- --blame-hang-timeout",{"type":40,"tag":194,"props":3890,"children":3891},{},[],{"type":40,"tag":167,"props":3893,"children":3894},{},[3895,3900,3911],{"type":40,"tag":194,"props":3896,"children":3897},{},[3898],{"type":46,"value":3899},"Multi-TFM project runs tests for all frameworks",{"type":40,"tag":194,"props":3901,"children":3902},{},[3903,3904,3909],{"type":46,"value":463},{"type":40,"tag":55,"props":3905,"children":3907},{"className":3906},[],[3908],{"type":46,"value":1379},{"type":46,"value":3910}," to target a specific framework",{"type":40,"tag":194,"props":3912,"children":3913},{},[],{"type":40,"tag":167,"props":3915,"children":3916},{},[3917,3927,3940],{"type":40,"tag":194,"props":3918,"children":3919},{},[3920,3925],{"type":40,"tag":55,"props":3921,"children":3923},{"className":3922},[],[3924],{"type":46,"value":667},{"type":46,"value":3926}," runner setting ignored",{"type":40,"tag":194,"props":3928,"children":3929},{},[3930,3932,3938],{"type":46,"value":3931},"Requires .NET 10+ SDK. On older SDKs, use ",{"type":40,"tag":55,"props":3933,"children":3935},{"className":3934},[],[3936],{"type":46,"value":3937},"\u003CTestingPlatformDotnetTestSupport>",{"type":46,"value":3939}," MSBuild property instead",{"type":40,"tag":194,"props":3941,"children":3942},{},[],{"type":40,"tag":167,"props":3944,"children":3945},{},[3946,3958,3985],{"type":40,"tag":194,"props":3947,"children":3948},{},[3949,3951,3956],{"type":46,"value":3950},"TUnit ",{"type":40,"tag":55,"props":3952,"children":3954},{"className":3953},[],[3955],{"type":46,"value":2896},{"type":46,"value":3957}," not recognized",{"type":40,"tag":194,"props":3959,"children":3960},{},[3961,3963,3968,3970,3976,3978,3983],{"type":46,"value":3962},"TUnit is MTP-only. On .NET SDK 10+ use ",{"type":40,"tag":55,"props":3964,"children":3966},{"className":3965},[],[3967],{"type":46,"value":60},{"type":46,"value":3969},"; on older SDKs use ",{"type":40,"tag":55,"props":3971,"children":3973},{"className":3972},[],[3974],{"type":46,"value":3975},"dotnet run",{"type":46,"value":3977}," since VSTest-mode ",{"type":40,"tag":55,"props":3979,"children":3981},{"className":3980},[],[3982],{"type":46,"value":60},{"type":46,"value":3984}," does not support TUnit",{"type":40,"tag":194,"props":3986,"children":3987},{},[],{"type":40,"tag":3989,"props":3990,"children":3991},"style",{},[3992],{"type":46,"value":3993},"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":3995,"total":4156},[3996,4012,4025,4040,4058,4070,4090,4100,4112,4122,4135,4146],{"slug":3997,"name":3997,"fn":3998,"description":3999,"org":4000,"tags":4001,"stars":4009,"repoUrl":4010,"updatedAt":4011},"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},[4002,4003,4006],{"name":13,"slug":14,"type":15},{"name":4004,"slug":4005,"type":15},"Engineering","engineering",{"name":4007,"slug":4008,"type":15},"Performance","performance",5535,"https:\u002F\u002Fgithub.com\u002Fdotnet\u002Fmsbuild","2026-07-22T05:37:33.965588",{"slug":4013,"name":4013,"fn":4014,"description":4015,"org":4016,"tags":4017,"stars":22,"repoUrl":23,"updatedAt":4024},"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},[4018,4019,4022,4023],{"name":13,"slug":14,"type":15},{"name":4020,"slug":4021,"type":15},"Code Analysis","code-analysis",{"name":20,"slug":21,"type":15},{"name":4007,"slug":4008,"type":15},"2026-07-12T08:23:25.400375",{"slug":4026,"name":4026,"fn":4027,"description":4028,"org":4029,"tags":4030,"stars":22,"repoUrl":23,"updatedAt":4039},"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},[4031,4032,4035,4036],{"name":13,"slug":14,"type":15},{"name":4033,"slug":4034,"type":15},"Android","android",{"name":20,"slug":21,"type":15},{"name":4037,"slug":4038,"type":15},"Microsoft","microsoft","2026-07-12T08:23:21.595572",{"slug":4041,"name":4041,"fn":4042,"description":4043,"org":4044,"tags":4045,"stars":22,"repoUrl":23,"updatedAt":4057},"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},[4046,4047,4048,4051,4054],{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":4049,"slug":4050,"type":15},"iOS","ios",{"name":4052,"slug":4053,"type":15},"macOS","macos",{"name":4055,"slug":4056,"type":15},"Observability","observability","2026-07-12T08:23:20.369986",{"slug":4059,"name":4059,"fn":4060,"description":4061,"org":4062,"tags":4063,"stars":22,"repoUrl":23,"updatedAt":4069},"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},[4064,4065,4068],{"name":4020,"slug":4021,"type":15},{"name":4066,"slug":4067,"type":15},"QA","qa",{"name":17,"slug":18,"type":15},"2026-07-12T08:23:51.277743",{"slug":4071,"name":4071,"fn":4072,"description":4073,"org":4074,"tags":4075,"stars":22,"repoUrl":23,"updatedAt":4089},"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},[4076,4077,4080,4083,4086],{"name":13,"slug":14,"type":15},{"name":4078,"slug":4079,"type":15},"Blazor","blazor",{"name":4081,"slug":4082,"type":15},"C#","csharp",{"name":4084,"slug":4085,"type":15},"UI Components","ui-components",{"name":4087,"slug":4088,"type":15},"Web Development","web-development","2026-07-15T06:03:29.216359",{"slug":4091,"name":4091,"fn":4092,"description":4093,"org":4094,"tags":4095,"stars":22,"repoUrl":23,"updatedAt":4099},"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},[4096,4097,4098],{"name":4020,"slug":4021,"type":15},{"name":20,"slug":21,"type":15},{"name":4037,"slug":4038,"type":15},"2026-07-12T08:21:34.637923",{"slug":4101,"name":4101,"fn":4102,"description":4103,"org":4104,"tags":4105,"stars":22,"repoUrl":23,"updatedAt":4111},"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},[4106,4109,4110],{"name":4107,"slug":4108,"type":15},"Build","build",{"name":20,"slug":21,"type":15},{"name":4004,"slug":4005,"type":15},"2026-07-19T05:38:19.340791",{"slug":4113,"name":4113,"fn":4114,"description":4115,"org":4116,"tags":4117,"stars":22,"repoUrl":23,"updatedAt":4121},"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},[4118,4119,4120],{"name":13,"slug":14,"type":15},{"name":4004,"slug":4005,"type":15},{"name":4007,"slug":4008,"type":15},"2026-07-19T05:38:18.364937",{"slug":4123,"name":4123,"fn":4124,"description":4125,"org":4126,"tags":4127,"stars":22,"repoUrl":23,"updatedAt":4134},"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},[4128,4129,4132,4133],{"name":4004,"slug":4005,"type":15},{"name":4130,"slug":4131,"type":15},"Monitoring","monitoring",{"name":4007,"slug":4008,"type":15},{"name":17,"slug":18,"type":15},"2026-07-12T08:21:35.865649",{"slug":4136,"name":4136,"fn":4137,"description":4138,"org":4139,"tags":4140,"stars":22,"repoUrl":23,"updatedAt":4145},"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},[4141,4142,4143,4144],{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":4004,"slug":4005,"type":15},{"name":4007,"slug":4008,"type":15},"2026-07-12T08:21:40.961722",{"slug":4147,"name":4147,"fn":4148,"description":4149,"org":4150,"tags":4151,"stars":22,"repoUrl":23,"updatedAt":4155},"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},[4152,4153,4154],{"name":20,"slug":21,"type":15},{"name":4004,"slug":4005,"type":15},{"name":4066,"slug":4067,"type":15},"2026-07-19T05:38:14.336279",144,{"items":4158,"total":4207},[4159,4166,4173,4181,4187,4195,4201],{"slug":4013,"name":4013,"fn":4014,"description":4015,"org":4160,"tags":4161,"stars":22,"repoUrl":23,"updatedAt":4024},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4162,4163,4164,4165],{"name":13,"slug":14,"type":15},{"name":4020,"slug":4021,"type":15},{"name":20,"slug":21,"type":15},{"name":4007,"slug":4008,"type":15},{"slug":4026,"name":4026,"fn":4027,"description":4028,"org":4167,"tags":4168,"stars":22,"repoUrl":23,"updatedAt":4039},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4169,4170,4171,4172],{"name":13,"slug":14,"type":15},{"name":4033,"slug":4034,"type":15},{"name":20,"slug":21,"type":15},{"name":4037,"slug":4038,"type":15},{"slug":4041,"name":4041,"fn":4042,"description":4043,"org":4174,"tags":4175,"stars":22,"repoUrl":23,"updatedAt":4057},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4176,4177,4178,4179,4180],{"name":13,"slug":14,"type":15},{"name":20,"slug":21,"type":15},{"name":4049,"slug":4050,"type":15},{"name":4052,"slug":4053,"type":15},{"name":4055,"slug":4056,"type":15},{"slug":4059,"name":4059,"fn":4060,"description":4061,"org":4182,"tags":4183,"stars":22,"repoUrl":23,"updatedAt":4069},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4184,4185,4186],{"name":4020,"slug":4021,"type":15},{"name":4066,"slug":4067,"type":15},{"name":17,"slug":18,"type":15},{"slug":4071,"name":4071,"fn":4072,"description":4073,"org":4188,"tags":4189,"stars":22,"repoUrl":23,"updatedAt":4089},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4190,4191,4192,4193,4194],{"name":13,"slug":14,"type":15},{"name":4078,"slug":4079,"type":15},{"name":4081,"slug":4082,"type":15},{"name":4084,"slug":4085,"type":15},{"name":4087,"slug":4088,"type":15},{"slug":4091,"name":4091,"fn":4092,"description":4093,"org":4196,"tags":4197,"stars":22,"repoUrl":23,"updatedAt":4099},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4198,4199,4200],{"name":4020,"slug":4021,"type":15},{"name":20,"slug":21,"type":15},{"name":4037,"slug":4038,"type":15},{"slug":4101,"name":4101,"fn":4102,"description":4103,"org":4202,"tags":4203,"stars":22,"repoUrl":23,"updatedAt":4111},{"slug":8,"name":9,"logoUrl":10,"githubOrg":8},[4204,4205,4206],{"name":4107,"slug":4108,"type":15},{"name":20,"slug":21,"type":15},{"name":4004,"slug":4005,"type":15},96]