Aspire 17 rejects previously accepted empty parameter values; clarify breaking change and dashboard failure

Open
#21,795 0 comments 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 2 days

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
48/100
Issue type
Bug
Clarity
Mostly clear
Activity status
Active
Tech stack
csharp, typescript
Domain
backend, cloud

Research direction

Start with src/Aspire.Hosting/Orchestrator/ParameterProcessor.cs and src/Aspire.Hosting/ApplicationModel/ParameterResource.cs, especially the value initialization and required parameter validation paths described in the issue. Check how .withOptional() is exposed to TypeScript and how the dashboard reports a dependent resource that is waiting. Done means the intended empty-value behavior is clear, the failure is actionable in the dashboard, and any intentional breaking change has What's New guidance.

Written by the indexing model from the issue text.

Description

breaking-change bug needs-area-label
Is there an existing issue for this?
  • I have searched the existing issues
Describe the bug

Upgrading only the SDK/integrations from 13.6.0-preview.1.26472.4 to 17.0.0-preview.1.26554.19 makes an unchanged, intentionally empty parameter fail validation. The API becomes FailedToStart, and dependent resources remain Waiting. This is changed empty-value semantics, not a newly introduced parameter or missing saved configuration.

Expected Behavior

Preserve previously accepted explicit empty values unless this is an intentional breaking change. If intentional, document it in Aspire 17 What's New with .withOptional() migration guidance. Make the dashboard failure actionable by identifying the offending parameter and its effect on dependent resources, without requiring inspection of API logs.

Steps To Reproduce

Use a TypeScript AppHost with an API resource and supply an intentionally empty parameter:

const selector = await builder.addParameter('optional-selector', { value: '' });
await api.withEnvironment('OPTIONAL_SELECTOR', selector);

This ran successfully with 13.6.0-preview.1.26472.4 (source commit 48996d7d0bf5781305ad04bcc927c68c955dcbc7). Upgrade only the SDK/integrations to 17.0.0-preview.1.26554.19 (source commit 87ef7dfc044526f5b46b6baffcccb9a011da1f7f), leaving parameter declarations unchanged; the API fails to start.

Exceptions (if any)
MissingParameterValueException: Parameter resource 'optional-selector' requires a value.
Aspire doctor output

Not collected.

Anything else?

#18108, merged October 12, 2026 (682f6abc32104286f472f103b9dbb269df8f14ba), is between the installed revisions. Initialization changed from WaitForValueTcs.TrySetResult(value), which accepted empty strings, to SetValueAsync(value). Parameters default to Required=true; required parameters now reject null/empty strings, with .withOptional() as the new opt-out.

Dominant language
C#
Stars
6.4k
Forks
1k
Avg merge
3d 3h
Merged PRs (30d)
349

Getting set up

Open in Codespaces

Starts the project's dev container in your browser, under your own GitHub account.

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

More from microsoft/aspire

All issues in microsoft/aspire

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.