dotnet/BenchmarkDotNet · error · InvalidOperationException
Field 'ConsoleRunnerPackage' not found.
Error message
Field 'ConsoleRunnerPackage' not found.
What it means
DotTraceDiagnoser.GetRunnerPath mirrors the dotMemory one: it reflects into JetBrains.Profiler.SelfApi's DotTrace type for the private static 'ConsoleRunnerPackage' field. Thrown when that field is absent, i.e. the loaded SelfApi layout differs from what this BDN build expects.
Solutions
- Keep the JetBrains.Profiler.SelfApi version aligned with the one referenced by your BenchmarkDotNet.Diagnostics.dotTrace build.
- Clear the cached prerequisite so InitAsync re-fetches the matching package.
- Upgrade BenchmarkDotNet to a release matching your SelfApi layout.
Defensive patterns
Strategy: fallback
Try / catch
try { /* use dotTrace diagnoser */ }
catch (InvalidOperationException ex) when (ex.Message.Contains("ConsoleRunnerPackage"))
{
log.Error("dotTrace SelfApi layout mismatch - align JetBrains.Profiler.SelfApi version with your BDN build.");
} Prevention
- Do not upgrade JetBrains.Profiler.SelfApi independently of BenchmarkDotNet.
- Clear the prerequisite cache after a BDN upgrade.
- Pin the SelfApi version declared by the BDN dotTrace diagnoser package.
When it happens
Trigger: The JetBrains.Profiler.SelfApi assembly resolved at runtime (via InitAsync download or NuGet) is a version where DotTrace's ConsoleRunnerPackage field was renamed/removed/moved. Same breakage class as the dotMemory equivalent.
Common situations: Independently upgrading the dotTrace SelfApi dependency; cached prerequisite from a different build; insider/preview JetBrains profiler build with refactored internals.
Related errors
- Method 'GetRunnerPath' not found.
- Field 'ConsoleRunnerPackage' not found.
- Method 'GetRunnerPath' not found.
- Unable to get value of 'ConsoleRunnerPackage'.
- Unable to invoke 'GetRunnerPath'.
AI-assisted analysis of dotnet/BenchmarkDotNet@b515068b61 (2026-08-13).
Data as JSON: /api/errors/03f37c2e848475ba.
Report an issue: GitHub.
Appendix: source
Thrown at src/BenchmarkDotNet.Diagnostics.dotTrace/DotTraceDiagnoser.cs:55
DotTrace.StopCollectingData();
DotTrace.SaveData();
}
protected override void Detach()
{
DotTrace.Detach();
}
protected override string CreateSnapshotFilePath(DiagnoserActionParameters parameters)
{
return ArtifactFileNameHelper.GetFilePath(parameters, "snapshots", DateTime.Now, "dtp", ".0000".Length);
}
protected override string GetRunnerPath()
{
var consoleRunnerPackageField = typeof(DotTrace).GetField("ConsoleRunnerPackage", BindingFlags.NonPublic | BindingFlags.Static);
if (consoleRunnerPackageField == null)
throw new InvalidOperationException("Field 'ConsoleRunnerPackage' not found.");
object? consoleRunnerPackage = consoleRunnerPackageField.GetValue(null);
if (consoleRunnerPackage == null)
throw new InvalidOperationException("Unable to get value of 'ConsoleRunnerPackage'.");
var consoleRunnerPackageType = consoleRunnerPackage.GetType();
var getRunnerPathMethod = consoleRunnerPackageType.GetMethod("GetRunnerPath");
if (getRunnerPathMethod == null)
throw new InvalidOperationException("Method 'GetRunnerPath' not found.");
string? runnerPath = getRunnerPathMethod.Invoke(consoleRunnerPackage, null) as string;
if (runnerPath == null)
throw new InvalidOperationException("Unable to invoke 'GetRunnerPath'.");
return runnerPath;
}
internal override bool IsSupported(RuntimeMoniker runtimeMoniker)View on GitHub (pinned to b515068b61)