microsoft/aspire · error · InvalidOperationException

Resource is not set. This callback context is not…

Error message

Resource is not set. This callback context is not associated with a resource.

What it means

The Resource property of CommandLineArgsCallbackContext throws InvalidOperationException when the context was created without a resource. Aspire always sets the resource when it invokes callbacks itself, so this only fires for manually created resource-less contexts.

Solutions

  1. Use the 3-arg constructor with the resource when Resource will be read
  2. Guard with _resource != null / try-catch before accessing Resource
  3. Refactor helper code to accept the resource as a parameter instead of reading it from the context

Example fix

// before
var ctx = new CommandLineArgsCallbackContext(args, cancellationToken);
UseResource(ctx.Resource);
// after
var ctx = new CommandLineArgsCallbackContext(args, resource, cancellationToken);
UseResource(ctx.Resource);
Defensive patterns

Strategy: try-catch

Validate before calling

if (context is CommandLineArgsCallbackContext c && typeof(CommandLineArgsCallbackContext).GetField("_resource", BindingFlags.NonPublic | BindingFlags.Instance)!.GetValue(c) is IResource) { /* safe to read Resource */ }

Try / catch

try { var r = context.Resource; } catch (InvalidOperationException) { /* context created without a resource; use fallback */ }

Prevention

When it happens

Trigger: Creating CommandLineArgsCallbackContext via the 2-arg constructor (args, cancellationToken) and then reading ctx.Resource.

Common situations: Unit tests or custom argument pipelines constructing the lightweight context and later code paths (shared helpers) reading Resource unconditionally.

Understand the failure class

Background: "Invalid state transition" errors: "status must be X, actually Y", "already rejected/charging/uninstalled", "cannot ... while running" — what they mean when a library rejects your call — this error's family across 31 libraries.

Related errors


AI-assisted analysis of microsoft/aspire@25830f84bd (2026-09-16). Data as JSON: /api/errors/e9f1dd875e9b4881. Report an issue: GitHub.

Appendix: source

Thrown at src/Aspire.Hosting/ApplicationModel/CommandLineArgsCallbackAnnotation.cs:149

    /// </summary>
    [AspireExport("CommandLineArgsCallbackContext.args", MethodName = "args")]
    internal CommandLineArgsEditor ArgsEditor => new(Args);

    /// <summary>
    /// Gets the logger facade used by polyglot callbacks.
    /// </summary>
    [AspireExport]
    internal LogFacade Log => new(Logger);

    /// <summary>
    /// The resource associated with this callback context.
    /// </summary>
    /// <remarks>
    /// This will be set to the resource in all cases where Aspire invokes the callback.
    /// </remarks>
    /// <exception cref="InvalidOperationException">Thrown when the CommandLineArgsCallbackContext was created without a specified resource.</exception>
    [AspireExport]
    public IResource Resource => _resource ?? throw new InvalidOperationException($"{nameof(Resource)} is not set. This callback context is not associated with a resource.");

    /// <summary>
    /// Gets the execution context associated with this callback.
    /// </summary>
    [AspireExport(MethodName = "executionContext")]
    internal DistributedApplicationExecutionContext ExportedExecutionContext => ExecutionContext;
}

View on GitHub (pinned to 25830f84bd)