This release brings .NET 10 NativeAOT instruction set support, improved CPU detection on Windows when WMIC is unavailable, test adapter filtering, and numerous bug fixes.

Breaking Changes

  • Deprecated .WithNuget() job extension in favor of .WithMsBuildArguments() (#2812)

Features

  • Add VS Test Adapter filter support for running specific benchmarks (#2788)
  • Update NativeAOT instruction set support for .NET 10+ (#2828)

Improvements

  • Add PowerShell-based CPU detection fallback for Windows when WMIC is unavailable (#2749)
  • Improve IsNetCore and IsNativeAOT detection for single-file apps without AOT (#2799)
  • Use --nodeReuse:false for dotnet CLI commands to improve build isolation (#2814)
  • Enable assembly signing for debug builds (#2774)

Bug Fixes

  • Fix ArgumentsSource on external types not working if the argument type is not primitive (#2820)
  • Fix workload warmup mode not working correctly
  • Fix EtwProfiler for file paths slightly under 260 characters (#2808)
  • Fix console logs being output twice when using TestAdapter (#2790)
  • Fix EventProcessor.OnEndValidationStage not being called when critical validation errors occur (#2816)
  • Fix XmlException thrown when TextReader.Null is passed to AppConfigGenerator (#2817)
  • Fix case sensitivity issue in NativeMemoryLogParser program name matching (#2795)
  • Fix typo in BuildPlots.R

Internal

  • Replace StyleCop.Analyzers with unstable version for improved analysis (#2796)
  • Add workflow to run selected tests (#2797)
  • Fix flaky MemoryDiagnoser tests on macOS (#2813)
  • Fix x86 disassembler tests for net462 (#2792)
  • Split TimeConsumingBenchmark class to reduce test time
  • Update BenchmarkDotNetDiagnosers package version (#2805)
  • Fix comment in package props about GenerateProgramFile (#2802)

Full Changelog: https://github.com/dotnet/BenchmarkDotNet/compare/v0.15.2...v0.15.3