NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
NuGet · #254 most downloaded on NuGet
This package provides telemetry for the platform. Microsoft Testing is a set of platform, framework and protocol intended to make it possible to run any test on any target or device.
Last release today
07 Oct 2026
Ships fairly regularly
a new release about every 3 weeks
Most releases are documented
notes for 42 of 47 stable releases
Nothing withdrawn
no release was ever pulled
3 years old
47 releases · first in 2024
Nothing published for this version
See full log of v4.4.1...v4.5.0
See full log of v4.4.1...v4.5.0
ITestHostExecutionOrchestratorMiddleware composed around exactly one existing ITestHostExecutionOrchestrator invocation, as a v1 single-invocation composition boundary. Register middleware via the new AddTestHostExecutionOrchestratorMiddleware extension method on ITestHostOrchestratorManager. This is not a typed multi-run retry/stress/shard engine: middleware cannot repeat, shard, or rewrite the wrapped orchestrator's result, must propagate downstream exceptions and cancellation unchanged, and the existing --retry-failed-tests orchestrator is unaffected, by @Evangelink in #11607Microsoft.Testing.Extensions.Configuration to import a caller-owned Microsoft.Extensions.Configuration snapshot, unambiguous platform-service lookup APIs for applications using Microsoft.Extensions.DependencyInjection, and provider/arity metadata for dotnet test command-line options, by @Evangelink in #11563ITestingPlatformBuilderConfigurator extension point so caller-owned host services can configure the Microsoft.Testing.Platform application builder before execution, by @Evangelink in #11635ExecuteRequestContext.StartTestExecutionAsync and TestExecution APIs so test frameworks can publish a canonical test lifecycle without depending on internal activity, reservation or message-bus types, by @Evangelink in #11630IDiagnosticLoggingInformation to extensions, providing the active diagnostic log file, minimum level and synchronous-write mode while preserving relocation and disabled-logging semantics, by @Evangelink in #11653Microsoft.Testing.Extensions.PackagedApp.MSBuild, an MTP-versioned package containing shared MSBuild targets, a classic UWP bootstrap, and complete .NET 8 and .NET 9 win-x64 out-of-process controller layouts for packaged Windows test applications. The integration is shared by MSTest.Sdk and explicit MSTest metapackage/adapter consumers without adding a Windows controller dependency to ordinary adapter projects, by @Evangelink in #11777specVersion: 0.1.0 and pinning documentation to the immutable v0.1.0 schema, by @Evangelink in #11731testId, executionId and retry attemptId fields with stable logical-test and per-execution identities while retaining the bounded extra.uid field for compatibility, by @Evangelink in #11602netstandard2.0 server-mode serialization, avoiding a dictionary and captured delegates on every JSON message, by @Evangelink in #11522dotnet test execution ID across PackagedApp AUMID activation so packaged WinUI hosts reconnect to the controller's existing test session instead of generating a conflicting handshake, while retaining the explicit environment allowlist and one-shot cleanup, by @Evangelink in #11499dotnet test IPC payloads without consuming later fields or allocating from invalid collection counts, by @Evangelink in #11649One column per month.
See full log of v4.4.0...v4.4.1
See full log of v4.4.0...v4.4.1
dotnet test output, by @Evangelink in #11221Microsoft.Testing.Platform.ServerMode.Client.Sources from overriding the target-framework C# language default in consuming projects, by @Evangelink in #11258See full log of v4.3.3...v4.4.0
See full log of v4.3.3...v4.4.0
Microsoft.Testing.Extensions.AzureFoundry, while keeping Azure.Identity optional for consumers that provide their own TokenCredential, by @Evangelink in #9707 and #9779IsStateful capability to the Microsoft.Testing.Platform server-mode protocol, allowing editor and IDE clients to declare that they retain test-node state for the whole session, by @Evangelink in #9789IArtifactNamingService for extensions that need platform-consistent artifact names by @Evangelink in #9783--show-slowest-tests <count> to the core terminal reporter to list the requested number of slowest completed tests at the end of a run by @Evangelink in #9894dotnet test, including automatic TRX, JUnit, CTRF and HTML merge processors and their merge engines, artifact-kind metadata, provenance for every merged input and an opt-in contract for processors that can accept an incomplete set of complete artifacts from a policy-truncated run. The built-in report processors do not opt in, and partially written or malformed artifacts remain invalid inputs, by @Evangelink in #9805, #10086, #10445, #10463, #10506, #10507 and #10529Microsoft.Testing.Extensions.PackagedApp, and support unpackaged WinUI test applications under Microsoft.Testing.Platform, by @Evangelink in #9914, #9970, #10330, #10489 and #10491browser-wasm and wasi-wasm, using HTTP transport for the browser dotnet test protocol and cooperative active/slow-test reporting on the single-threaded browser runtime, by @Evangelink in #9781, #9857, #10129, #10143 and #10128--report-azdo-groups <on|off> and --report-azdo-annotations <on|off> toggles to Azure DevOps report extension by @Evangelink in #9542RetryAttemptProperty, a TestNode property that lets a test framework report several in-process attempts of the same test under one test node uid (AttemptNumber plus IsSuperseded). The terminal reporter annotates the attempts (failed (try 1) MyTest) and counts the test once, the process exit code and the TRX / JUnit / Azure DevOps reports ignore superseded attempts, and the CTRF report collapses them into retries / retryAttempts[] / flaky in #10292AssertionFailureProperty and forward structured expected/actual values over the dotnet test protocol, allowing IDEs and reporters to consume assertion details without parsing the failure message, by @Evangelink in #9826 and #10353--publish-azdo-test-results creates the run, so results can be followed while the tests are still running, and clarify that the build's Tests tab only lists the run once it completes in #10191InvokeTestingPlatform MSBuild target (/t:Test) through the TestingPlatformEnvironmentVariable item: <TestingPlatformEnvironmentVariable Include="DOTNET_ROOT" Value="$(DotNetRoot)" />. The value is carried by item metadata, which is not subject to MSBuild's ; splitting, so values containing a ; reach the test process as authored. The variables are applied on top of the environment inherited from MSBuild, so declaring none keeps the previous behavior in #10342Microsoft.Testing.Extensions.GitHubActionsReport annotations to the test's declared source location (TestFileLocationProperty) when the failure's stack trace yields no frame inside the workspace, and use it to place skipped-test ::warning annotations on the pull request diff gutter instead of emitting them title-only. The property is populated by the MSTest adapter and by the VSTest bridge, so xUnit, NUnit and other bridged frameworks are covered too in #9003--enable-dynamic-extensions allows test applications to discover and load extension assemblies that are not statically referenced, by @Evangelink in #10406Microsoft.Testing.Platform.ServerMode.Client.Sources package, providing a canonical dependency-free, Native AOT-compatible client for the platform's server-mode JSON-RPC protocol, by @nohwnd in #10085dotnet test invocation while retaining deterministic per-assembly details and authoritative run totals, duration and exit verdict, by @Evangelink in #10530on-failure support to --report-gh-step-summary, and add --report-gh-step-summary-sections for selecting test-results, slow-tests, coverage or all, by @azat-msft in #10633 and @Evangelink in #10695 and #10697--report-gh-history, including historical failure context, retry-aware results, and workflow-managed artifact persistence in #10770IConfigurationRoot, IConfigurationSection and IHierarchicalConfigurationProvider so extensions can consume merged nested configuration without reparsing source-specific JSON, by @Evangelink in #10699--show-test-results <outcomes> to filter which passed, failed, skipped, error and timeout result blocks the terminal reporter displays without changing progress or summary counts, by @Evangelink in #10737[WorkItem] and [GitHubWorkItem] metadata as schema-compatible work-item definitions in MTP-generated TRX reports, by @Evangelink in #10861MtpServerClient.LaunchInProcessAsync to Microsoft.Testing.Platform.ServerMode.Client.Sources, so embedded hosts such as MAUI or Android/iOS test apps can drive a Microsoft.Testing.Platform application hosted in their own process without Process.Start. The client still owns the loopback listener, the server-mode arguments, the connect race, the transport setup and a bounded shutdown (MtpServerClientOptions.ServerShutdownTimeout); the caller only supplies how to build and run the test application. IMtpServerClient also gains ShutdownAsync() for a non-blocking teardown and ServerExitCode for the value the application returned. The path is loopback TCP, so it fails fast with PlatformNotSupportedException on browser/WASM in #10890[current major, next major) dependency range on Microsoft.Testing.Platform, preventing NuGet from combining an extension with an unsupported future platform major by @Evangelink in #9730pipelineReference (stage, phase and job, with their attempt numbers) and startedDate when --publish-azdo-test-results creates an Azure DevOps test run, so the run is attributed to the stage and job that produced it in multi-stage pipelines instead of only to the build, by @Evangelink in #10331dotnet test pipe, make retry-consolidated HTML reports retain a visible flaky-test history, and list recovered tests in GitHub Actions summaries. GitHub summary fragments remain composable with solution-wide artifact post-processing, while TRX intentionally keeps its existing final-attempt behavior, by @Evangelink in #10761off because parallel assembly output can interleave anonymous groups; use --report-azdo-groups on to opt in, by @Evangelink in #10474Attempt# <n> - <test> and upload each retry attempt's artifacts to the sub-result that produced them, by @Evangelink in #10704 and #10723dotnet test -m workers cannot forward these commands because their Console.Out output is discarded, by @Evangelink in #9895InvokeTestingPlatform MSBuild target set DOTNET_ROOT_<ARCH> from DOTNET_HOST_PATH when launching a compatible apphost, matching dotnet test runtime resolution. Set TestingPlatformDisableAppHostDotnetRoot to true to opt out; an explicit applicable TestingPlatformEnvironmentVariable remains authoritative in #10408--report-trx crashing with PlatformNotSupportedException on single-threaded WebAssembly runtimes (browser-wasm / wasi-wasm): the TRX streaming store now serializes records inline instead of starting a dedicated writer thread and draining a BlockingCollection<T> in #2196ITask.RunLongRunning throws PlatformNotSupportedException on browser-wasm / wasi-wasm; the reporter caught and logged it to the diagnostic log, then stayed marked active with no scan loop, so the failure was invisible outside --diagnostic in #2196browser-wasm and wasi-wasm, including each artifact's display name and virtual file-system path, in #10311Microsoft.Testing.Extensions.AzureDevOpsReport crashing with ObjectDisposedException during teardown, after results were already published, when the platform disposes the live test-results publisher more than once in #10191--publish-azdo-test-results no longer fails silently in #10191Microsoft.Testing.Extensions.AzureDevOpsReport throwing PlatformNotSupportedException on browser-wasm (and wasi-wasm): the shared HttpClient now only opts into HttpClientHandler.AutomaticDecompression where the handler supports it, since fetch and wasi:http already decode gzip/deflate responses themselves in #10313--report-azdo faulting the test run with Could not find solution root, .git not found in ... or any parent directory. when annotating a failing test from an application that does not run inside a git checkout (a published app, a container, or browser-wasm, whose virtual filesystem has no .git); the reporter now degrades to a message-only annotation, matching the GitHub Actions reporter in #10313MAX_PATH limit. Both per-test ResultFile entries and session-level CollectorDataEntries attachments (crash dumps, hang dumps and other extension artifacts) could disappear from the report while the run still reported success in #10312RunInfos section of the generated TRX in #10312--publish-azdo-test-results creating and completing one Azure DevOps test run per --retry-failed-tests attempt instead of one run for the build. The run's lifetime now belongs to the retry orchestrator process, which outlives every attempt: it creates the run once, hands its id to the attempts through the inherited TESTINGPLATFORM_AZUREDEVOPS_TESTRUNID variable, and completes it once. Orchestrator processes take part in the existing per-build coordination too, so several test projects sharing a results directory still publish into a single run in #10360ITestHostOrchestratorApplicationLifetime acquired in BeforeRunAsync when the orchestration is canceled or fails. AfterRunAsync was only invoked when the orchestrator completed normally, so an Azure DevOps test run created before a cancellation — or before --retry-failed-tests rejected server mode or hot reload — was left InProgress and never appeared in the build's Tests tab in #10360--report-gh is also specified, instead of accepting options that can never take effect, by @Evangelink in #10500--retry-failed-tests attempts so top-level reports retain tests that passed before the final narrowed attempt and represent each logical test's final outcome, by @Evangelink in #10542PublishTestResults@2, by @Evangelink in #10706dotnet <assembly> when a Unix server-mode apphost exists but is not executable, instead of failing the launch with Permission denied, by @nohwnd in #10641Restore compatibility with the deprecated MSTest.Engine used by source-generated test projects by @Evangelink in #9938
See full log of v4.3.2...v4.3.3
IndexOutOfRangeException when a UID after the first starts with a filter operator by @azat-msft in #9771testconfig.json on .NET Framework by @Evangelink in #10144Microsoft.Testing.Extensions.AzureDevOpsReport crashing during teardown from duplicate data-consumer disposal after a successful test run by @Evangelink in #10195Servicing release to keep Microsoft.Testing.Platform aligned with the MSTest 4.3.2 release. No functional platform changes beyond the localization upd
Servicing release to keep Microsoft.Testing.Platform aligned with the MSTest 4.3.2 release. No functional platform changes beyond the localization updates below.
Fix forward-compat crash (MissingMethodException) loading old 2.x extensions (Telemetry, TrxReport, VSTestBridge) on .NET Framework by @Evangelink in
MissingMethodException) loading old 2.x extensions (Telemetry, TrxReport, VSTestBridge) on .NET Framework by @Evangelink in #9739Add --progress {auto|on|off} and deprecate --no-progress in MTP terminal reporter by @Evangelink in #9145
See full log of v4.2.3...v4.3.0
failed in LLM environments by @Evangelink in #8771IBlockingDataConsumer marker interface for synchronous inline data consumption by @Evangelink in #9426Microsoft.Testing.Extensions.VideoRecorder extension for screen recording during test runs (requires ffmpeg; --capture-video opt-in) by @Evangelink in #9377ITestHostLauncher extension point and Microsoft.Testing.Extensions.PackagedApp reference extension for packaged app test host deployment by @Evangelink in #9454PropertyBag.FirstOrDefault<TProperty>() for efficient single-property lookup without per-call array allocation by @Evangelink in #9488Microsoft.Testing.Extensions.GitHubActionsReport extension emitting GitHub Actions workflow commands (per-assembly log groups, failure annotations, job summary, slow-test notices) by @azat-msft in #9541::warning annotations for skipped tests in Microsoft.Testing.Extensions.GitHubActionsReport by @Evangelink in #9641--minimum-expected-tests N govern the zero-tests verdict, so a run of fewer than N tests reports the minimum-expected violation (exit code 9) instead of "zero tests ran" (exit code 8) even when no tests ran. This lets a dotnet test --test-modules orchestrator tell a stricter local-minimum violation apart from an empty module (#7457) by @Copilot in #9709<asm>_<tfm>_<arch> default for report and log file names by @Evangelink in #8971--treenode-filter + --filter-uid mutual exclusion: validated during command-line validation (proper InvalidCommandLine exit code) instead of a late NotSupportedException; documentation gaps for the ! NOT operator and property-filter semantics addressed by @Evangelink in #9458See full log of v4.2.2...v4.2.3
See full log of v4.2.2...v4.2.3
See full log of v4.2.1...v4.2.2
See full log of v4.2.1...v4.2.2
A list of changes since last release are available of v2.2.1...v2.2.2
See full log of v4.1.0...v4.2.1
See full log of v4.1.0...v4.2.1
--show-stdout and --show-stderr command-line options by @Youssef1313 in #7637TestApplicationResult.ConsumeAsync by @Youssef1313 in #7496IsTestingPlatformApplication to prevent interference with VSTest projects by @Copilot in #7539ITestSessionLifetimeHandler.OnTestSessionFinishingAsync by @Youssef1313 in #7520A list of changes since last release are available of v2.2.0-preview-20210115-03...v2.2.1
See full log of v4.0.2...v4.1.0
See full log of v4.0.2...v4.1.0
Microsoft.Testing.Platform by @MarcoRossignoli in #6777
dotnet test when using --crashdump and crash happens by @Copilot in #7040See full log of v4.0.1...v4.0.2
See full log of v4.0.1...v4.0.2
See full log of v4.0.0...v4.0.1
See full log of v4.0.0...v4.0.1
Breaking changes: see for information.
See full log of v3.11.0...v4.0.0
A list of changes since last release are available of v2.0.0-beta4...v2.0.0
See full log of v4.0.1...v4.0.2
See full log of v4.0.1...v4.0.2
See full log of v3.10.5...v3.11.0
See full log of v3.10.5...v3.11.0
--debug option to MTP by @Evangelink in #6499 and #6516List<string> allocations in ObjectModelConverters by @Youssef1313 in #6396See full log of v3.10.4...v3.10.5
See full log of v3.10.4...v3.10.5
See full log of v3.10.3...v3.10.4
See full log of v3.10.3...v3.10.4
See full log of v3.10.2...v3.10.3
See full log of v3.10.2...v3.10.3
See full log of v3.10.1...v3.10.2
See full log of v3.10.1...v3.10.2
See full log of v3.10.0...v3.10.1
See full log of v3.10.0...v3.10.1
See full log of v3.9.3...v3.10.0
See full log of v3.9.3...v3.10.0
TestMetadataProperty in the treenode filter by @thomhurst in #5679ITestApplicationLifecycleCallbacks and add ITestHostApplicationLifetime by @Youssef1313 in #5889--filter-uid on console by @Youssef1313 in #6002See full log of v3.9.2...v3.9.3
See full log of v3.9.2...v3.9.3
See full log of v3.9.1...v3.9.2
See full log of v3.9.1...v3.9.2
See full log of v3.9.0...v3.9.1
See full log of v3.9.0...v3.9.1
See full log of v3.8.3...v3.9.0
See full log of v3.8.3...v3.9.0
See full log of v3.8.2...v3.8.3
See full log of v3.8.2...v3.8.3
_TestArchitecture by @Youssef1313 in #5115dotnet exec dll by @Youssef1313 in #5128--results-directory before configuration by @Youssef1313 in #5204See full log of v3.8.1...v3.8.2
See full log of v3.8.1...v3.8.2
Fix breaking change with telemetry by @Evangelink in #5050
See full log of v3.8.0...v3.8.1
global:: prefix for generated code by @Youssef1313 in #5033See full log of v3.7.3...v3.8.0
See full log of v3.7.3...v3.8.0
TestingPlatformDisableCustomTestTarget is true by @Youssef1313 in #4838See full log of v3.7.2...v3.7.3
See full log of v3.7.2...v3.7.3
MissingMethodException for init-only properties when code is compiled against netstandard2.0 and runs on net9.0 at runtime by @dependabot in #4794See full log of v3.7.1...v3.7.2
See full log of v3.7.1...v3.7.2
See full log of v3.7.0...v3.7.1
See full log of v3.7.0...v3.7.1
See full log of v1.4.3...v1.5.0
See full log of v1.4.3...v1.5.0
ExecuteRequestContext ctor for testability by @MarcoRossignoli in #3717StandardOutputProperty and StandardErrorProperty by @MarcoRossignoli in #3748OnExit phase for for IPushOnlyProtocol by @MarcoRossignoli in #3820See full log of v1.4.2...v1.4.3
See full log of v1.4.2...v1.4.3
See full log of v1.4.1...v1.4.2
See full log of v1.4.1...v1.4.2
See full log of v1.4.0...v1.4.1
See full log of v1.4.0...v1.4.1
See full log of v1.3.2...v1.4.0
See full log of v1.3.2...v1.4.0
-- for msbuild dotnet test integration by @MarcoRossignoli in #3309--no-progress and --no-ansi by @nohwnd in #3550--output option by @nohwnd in #3565TestFrameworkCapabilitiesExtensions in experimental mode by @MarcoRossignoli in #3653StandardOutputProperty and StandardErrorProperty (#3748) by @MarcoRossignoli in #3749Content-Length by @MarcoRossignoli in #3641CommandLineHandler duplication check message by @MarcoRossignoli in #3660dotnet test MSBuild extension by @MarcoRossignoli in #3703--server jsonrpc by @MarcoRossignoli in #3655--list-tests by @MarcoRossignoli in #3722A list of changes since last release are available of 1.4.0-beta...1.4.0
See full log of v1.3.1...v1.3.2
See full log of v1.3.1...v1.3.2
See full log of v1.2.1...v1.3.1
See full log of v1.2.1...v1.3.1
Don't call Class Cleanup if Class Init not called
A list of changes since last release are available of v1.2.0-beta3...v1.2.0
A list of changes since last release are available of v1.2.0-beta3...v1.2.0
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →