dotnet/machinelearning · error · ArgumentException
No Onnx Session Options
Error message
No Onnx Session Options
What it means
GetOnnxSessionOption retrieves registered OnnxSessionOptions from the environment, but only if the IHostEnvironment implements IHostEnvironmentInternal. Otherwise it throws ArgumentException 'No Onnx Session Options'.
Source
Thrown at src/Microsoft.ML.OnnxTransformer/OnnxSessionOptions.cs:26
using Microsoft.ML.Data;
using Microsoft.ML.OnnxRuntime;
using Microsoft.ML.Runtime;
using Microsoft.ML.Transforms.Onnx;
namespace Microsoft.ML.Transforms.Onnx
{
public static class OnnxSessionOptionsExtensions
{
private const string OnnxSessionOptionsName = "OnnxSessionOptions";
public static OnnxSessionOptions GetOnnxSessionOption(this IHostEnvironment env)
{
if (env is IHostEnvironmentInternal localEnvironment)
{
return localEnvironment.GetOptionOrDefault<OnnxSessionOptions>(OnnxSessionOptionsName);
}
throw new ArgumentException("No Onnx Session Options");
}
public static void SetOnnxSessionOption(this IHostEnvironment env, OnnxSessionOptions onnxSessionOptions)
{
if (env is IHostEnvironmentInternal localEnvironment)
{
localEnvironment.SetOption(OnnxSessionOptionsName, onnxSessionOptions);
}
else
throw new ArgumentException("No Onnx Session Options");
}
}
public sealed class OnnxSessionOptions
{
internal void CopyTo(SessionOptions sessionOptions)
{
sessionOptions.EnableMemoryPattern = EnableMemoryPattern;View on GitHub (pinned to 7b76e69cf9)
Solutions
- Call SetOnnxSessionOption on the environment before reading options
- Use a real ML.NET host environment (MLContext-based) that implements IHostEnvironmentInternal
- Fix test doubles to implement IHostEnvironmentInternal
- Catch ArgumentException and use default session options
Example fix
// before
var opts = env.GetOnnxSessionOption(); // env is plain IHostEnvironment mock
// after
if (env is IHostEnvironmentInternal)
var opts = env.GetOnnxSessionOption();
else
var opts = new OnnxSessionOptions(); // defaults Defensive patterns
Strategy: type-guard
Validate before calling
if (env is IHostEnvironmentInternal internalEnv)
{
internalEnv.SetOnnxSessionOption(new OnnxSessionOptions());
}
var opts = env is IHostEnvironmentInternal ? env.GetOnnxSessionOption() : new OnnxSessionOptions(); Type guard
bool HasOnnxOptions(IHostEnvironment env) => env is IHostEnvironmentInternal;
Try / catch
try { var o = env.GetOnnxSessionOption(); } catch (ArgumentException ex) when (ex.Message.Contains("No Onnx Session Options")) { var o = new OnnxSessionOptions(); } Prevention
- Use standard ML.NET hosts (MLContext) rather than custom IHostEnvironment fakes
- Always call SetOnnxSessionOption before GetOnnxSessionOption
- Keep Microsoft.ML/ONNX package versions aligned
When it happens
Trigger: Calling env.GetOnnxSessionOption() on an IHostEnvironment that is not IHostEnvironmentInternal, or on an internal environment where no OnnxSessionOptions were registered via SetOnnxSessionOption (GetOptionOrDefault returning null path still requires the internal interface; the throw occurs when the cast fails).
Common situations: Using a mock or custom IHostEnvironment in tests that doesn't implement IHostEnvironmentInternal; calling before SetOnnxSessionOption was invoked on that environment.
Understand the failure class
Background: "X is required", "must be set", "cannot be empty": the missing-required-config error family, from Vertex AI project/location to WeChat keys — this error's family across 18 libraries.
Related errors
- num_key_value_heads must be specified
- num_key_value_heads must be specified
- Not implemented type {typeof(T)}
- Activation function {name} not supported.
- {nameof(ChannelMessageKind)}.{e.Kind} is not yet implemented
AI-assisted analysis of dotnet/machinelearning@7b76e69cf9 (2026-09-11).
Data as JSON: /api/errors/477307bbd2569689.
Report an issue: GitHub.