Skip to content

Report actionable errors when DotnetProjectResource is published - #19190

Merged
Karol Zadora-Przylecki (karolz-ms) merged 1 commit into
mainfrom
dev/karolz/dotnet-project-resource-publish-err
Aug 14, 2026
Merged

Report actionable errors when DotnetProjectResource is published#19190
Karol Zadora-Przylecki (karolz-ms) merged 1 commit into
mainfrom
dev/karolz/dotnet-project-resource-publish-err

Conversation

@karolz-ms

Copy link
Copy Markdown
Contributor

Description

The new DotnetProjectResource does not support publishing yet, but the current implementation just silently fails when someone tries publishing. This PR replaces that with an actionable error.

Fixes # (issue)

Checklist

  • Is this feature complete?
    • Yes. Ready to ship.
    • No. Follow-up changes expected.
  • Are you including unit tests for the changes and scenario tests if relevant?
    • Yes
    • No
  • Did you add public API?
    • Yes
      • If yes, did you have an API Review for it?
        • Yes
        • No
      • Did you add <remarks /> and <code /> elements on your triple slash comments?
        • Yes
        • No
    • No
  • Does the change make any security assumptions or guarantees?
    • Yes
      • If yes, have you done a threat model and had a security review?
        • Yes
        • No
    • No

Copilot AI balanced review requested due to automatic review settings August 10, 2026 16:32
@github-actions

Copy link
Copy Markdown
Contributor

🚀 Dogfood this PR with:

⚠️ WARNING: Do not do this without first carefully reviewing the code of this PR to satisfy yourself it is safe.

curl -fsSL https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.sh | bash -s -- 19190

Or

  • Run remotely in PowerShell:
iex "& { $(irm https://raw.githubusercontent.com/microsoft/aspire/main/eng/scripts/get-aspire-cli-pr.ps1) } 19190"

@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Adds actionable publish/deploy failures for unsupported DotnetProjectResource publishing.

Changes:

  • Adds pipeline and manifest validation.
  • Documents supported publishing alternatives.
  • Adds publish/deploy regression tests.

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 3 comments.

File Description
src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs Adds publishing validation and guidance.
src/Aspire.Hosting.Dotnet/README.md Documents publishing limitations and alternatives.
tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs Tests publishing failures and opt-outs.

💡 Add a code-review agent skill for context-aware, tailored reviews. Learn more in the docs.

Comment thread src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs Outdated
Comment thread tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs Outdated
Comment thread tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs Outdated

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Found 2 correctness issues: publish/deploy validation is not ordered before all pipeline work, and explicit custom manifest callbacks are rejected.

Comment thread src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs Outdated
Comment thread src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs Outdated
@karolz-ms

Copy link
Copy Markdown
Contributor Author

PR Testing Report

PR Information

The repo container runner was selected initially, but Docker is not installed on the host. Testing continued locally after explicit approval.

Artifact Version Verification

  • Expected Commit: bf1522d429fae92c6af4dd582ee4c4b4aab33407
  • Installed CLI Version: 13.6.0-pr.19190.gbf1522d4
  • Source Checkout: Detached worktree at the full expected commit
  • Status: ✅ Verified

Changes Analyzed

Files Changed

  • src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs - adds publish/deploy validation and actionable guidance
  • src/Aspire.Hosting.Dotnet/README.md - documents unsupported automatic publishing and supported alternatives
  • tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs - adds pipeline, manifest, exclusion, containerization, and aggregation coverage

Change Categories

  • CLI changes
  • Hosting integration changes
  • Dashboard changes
  • Template changes
  • Client/component changes
  • VS Code extension changes
  • Test changes
  • CI infrastructure changes

Test Scenarios Executed

Scenario 1: PR artifact and targeted unit validation

Objective: Verify the downloaded artifact and changed source both match the current PR head, then execute the focused unit coverage.

Coverage Type: Artifact integrity and unit validation

Status: ✅ Passed

Steps:

  1. Installed the PR CLI through the dogfood installer into the isolated workspace.
  2. Verified the CLI version contains the PR head short SHA.
  3. Restored the detached PR-head checkout.
  4. Ran DotnetProjectResourceTests with quarantined and outerloop tests excluded.

Evidence:

  • evidence/install.log
  • evidence/version.txt
  • evidence/restore.log
  • evidence/dotnet-project-resource-tests.log

Observations:

  • 33 tests passed, 0 failed, 0 skipped.

Scenario 2: Run-mode regression

Objective: Confirm DotnetProjectResource still works during local orchestration.

Coverage Type: Happy path

Status: ✅ Passed

Steps:

  1. Created a fresh file-based AppHost from the PR hive.
  2. Added the PR version of Aspire.Hosting.Dotnet.
  3. Added a file-based C# resource with AddDotnetProject.
  4. Started the AppHost, waited for the resource to be up, described it, and stopped the AppHost.

Evidence:

  • evidence/run-regression-start.log
  • evidence/run-regression-wait.log
  • evidence/run-regression-describe.json
  • evidence/run-regression-stop.log

Observations:

  • The resource reached Running state with Healthy health status.
  • The resource command used dotnet run --file ... --no-launch-profile, preserving expected run behavior.

Scenario 3: Plain resource publish failure

Objective: Verify aspire publish rejects an untransformed DotnetProjectResource before producing deployment artifacts.

Coverage Type: Unhappy path

Status: ✅ Passed

Expected Unhappy-Path Outcome: Non-zero exit, actionable validation error, and no manifest.

Evidence:

  • evidence/publish-failure.log
  • evidence/publish-failure-normalized.log
  • evidence/publish-failure-exit-code.txt

Observations:

  • The command exited with code 6.
  • validate-dotnet-project-publish failed before the publish step.
  • The error identified resource plain and recommended AddProject<TProject>(...), AddCSharpApp(...), PublishAsDockerFile(...), and ExcludeFromManifest().
  • No aspire-manifest.json was created.

Scenario 4: Plain resource deploy failure

Objective: Verify aspire deploy rejects the unsupported resource before deployment work.

Coverage Type: Unhappy path

Status: ✅ Passed

Expected Unhappy-Path Outcome: Non-zero exit, the same actionable validation error, and no deployment manifest.

Evidence:

  • evidence/deploy-failure.log
  • evidence/deploy-failure-normalized.log
  • evidence/deploy-failure-exit-code.txt

Observations:

  • The command exited with code 6.
  • validate-dotnet-project-publish failed before deployment work.
  • The complete actionable guidance was present.
  • No aspire-manifest.json was created.

Scenario 5: ExcludeFromManifest publishing

Objective: Verify an intentionally run-only resource remains a valid publish configuration.

Coverage Type: Supported alternative

Status: ✅ Passed

Steps:

  1. Created a fresh AppHost with a DotnetProjectResource configured through ExcludeFromManifest().
  2. Ran the normal publish pipeline.
  3. Ran the publish-manifest pipeline step and validated the complete manifest resource map.

Evidence:

  • evidence/excluded-publish.log
  • evidence/excluded-manifest-publish.log
  • evidence/excluded-publish-manifest.json

Observations:

  • Both pipeline invocations succeeded.
  • The generated manifest contained an empty resources object.

Scenario 6: PublishAsDockerFile publishing

Objective: Verify explicit container publishing remains supported and produces container metadata.

Coverage Type: Supported alternative

Status: ✅ Passed

Steps:

  1. Created a fresh AppHost with a DotnetProjectResource configured through PublishAsDockerFile().
  2. Ran the normal publish pipeline.
  3. Ran the publish-manifest pipeline step and validated the complete resource manifest.

Evidence:

  • evidence/docker-publish.log
  • evidence/docker-manifest-publish.log
  • evidence/docker-publish-manifest.json

Observations:

  • Both pipeline invocations succeeded.
  • The resource was emitted as container.v1.
  • The manifest's build.context and build.dockerfile resolve to the scenario directory and its Dockerfile.

Scenario 7: Mixed-resource aggregation

Objective: Verify multiple unsupported resources are aggregated while explicitly excluded and containerized resources are filtered out.

Coverage Type: Boundary and unhappy path

Status: ✅ Passed

Expected Unhappy-Path Outcome: One actionable failure naming only the unsupported resources.

Evidence:

  • evidence/mixed-resources.log
  • evidence/mixed-resources-normalized.log
  • evidence/mixed-resources-exit-code.txt

Observations:

  • The command exited with code 6.
  • The exact subject was Resources 'api', 'worker' are DotnetProjectResource instances.
  • The excluded and containerized resources were not included in the unsupported resource set.
  • No manifest was created.

Summary

Scenario Status Notes
Artifact and unit validation ✅ Passed Exact head verified; 33/33 tests passed
Run-mode regression ✅ Passed Resource was Running and Healthy
Publish failure ✅ Passed Exit 6, actionable guidance, no manifest
Deploy failure ✅ Passed Exit 6 before deployment work
ExcludeFromManifest ✅ Passed Empty manifest resource map
PublishAsDockerFile ✅ Passed Exact container.v1 resource manifest
Mixed-resource aggregation ✅ Passed Only api and worker were rejected

Overall Result

✅ PR VERIFIED

No blocking issues were found in the tested hosting behavior.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

Copilot AI review requested due to automatic review settings August 10, 2026 17:53
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

Comment thread src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs Outdated
@karolz-ms
Karol Zadora-Przylecki (karolz-ms) marked this pull request as draft August 10, 2026 17:57
Copilot AI review requested due to automatic review settings August 10, 2026 18:13

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

Comment thread src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs Outdated
@github-actions

This comment has been minimized.

Copilot AI review requested due to automatic review settings August 10, 2026 19:26
@github-actions

This comment has been minimized.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated no new comments.

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@karolz-ms

Copy link
Copy Markdown
Contributor Author

PR Testing Report

PR Information

Docker was not installed on the host, so the approved local execution target was used.

Artifact Version Verification

  • Expected Commit: 92c497a7b3dd5ad4c835fe3d11cd8694c42b8526
  • Installed CLI Version: 13.6.0-pr.19190.g92c497a7
  • Source Checkout: Detached worktree at the full expected commit
  • PR Hive Package: Aspire.Hosting.Dotnet.13.6.0-pr.19190.g92c497a7.nupkg
  • Status: Verified

Changes Analyzed

Files Changed

  • src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs - adds publish/deploy validation, pipeline ordering, opt-in filtering, and actionable singular/plural guidance.
  • src/Aspire.Hosting.Dotnet/README.md - documents unsupported automatic publishing and supported alternatives.
  • tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs - adds manifest, pipeline-root, ordering, opt-in, and aggregation coverage.

Change Categories

  • CLI changes
  • Hosting integration changes
  • Dashboard changes
  • Template changes
  • Client/component changes
  • VS Code extension changes
  • Test changes
  • CI infrastructure changes

Test Scenarios Executed

Scenario 1: PR artifact and targeted source validation

Objective: Verify the dogfood artifact and source checkout match the latest PR head, then execute the focused unit coverage.

Coverage Type: Artifact integrity and unit validation

Status: Passed

Steps:

  1. Installed the PR CLI and package hive into an isolated temp directory.
  2. Verified the CLI version contains the current PR head short SHA.
  3. Restored a detached source checkout at the full PR head.
  4. Ran DotnetProjectResourceTests with quarantined and outerloop tests excluded.

Evidence:

  • evidence/install.log
  • evidence/version.txt
  • evidence/source-head.txt
  • evidence/restore.log
  • evidence/dotnet-project-resource-tests.log

Observations:

  • 39 tests passed, 0 failed, 0 skipped.

Scenario 2: Run mode and before-start regression

Objective: Confirm a plain DotnetProjectResource remains usable during local orchestration and does not gate before-start work.

Coverage Type: Happy path and regression boundary

Status: Passed

Steps:

  1. Created a fresh file-based AppHost and file-based C# resource from the PR hive.
  2. Registered marker-backed work under WellKnownPipelineSteps.BeforeStart.
  3. Started the AppHost in isolated mode and waited for resource svc to become healthy.
  4. Captured the resource description and application logs, then stopped the AppHost.

Evidence:

  • evidence/run-regression-start.log
  • evidence/run-regression-wait.log
  • evidence/run-regression-describe.json
  • evidence/run-regression-logs.json
  • evidence/run-regression-before-start-marker.txt
  • evidence/run-regression-stop.log

Observations:

  • The resource reached Running state with Healthy health status.
  • The application emitted SERVICE_READY.
  • The before-start marker executed.
  • The resource command used dotnet run --file ... --no-cache --configuration Debug --no-launch-profile.

Scenario 3: Direct build and push boundaries

Objective: Verify directly selected build and push roots execute without triggering publish validation.

Coverage Type: Boundary

Status: Passed

Steps:

  1. Created separate fresh AppHosts for build and push.
  2. Added marker-backed work under build and push.
  3. Ran aspire do build and aspire do push through the verified PR CLI.

Evidence:

  • evidence/build-boundary.log
  • evidence/build-boundary-marker.txt
  • evidence/push-boundary.log
  • evidence/push-boundary-marker.txt

Observations:

  • Build completed 7/7 pipeline steps and executed test-build-work.
  • Push completed 6/6 pipeline steps and executed test-push-work.
  • Neither command emitted the unsupported-publish validation error.

Scenario 4: Plain resource publish failure

Objective: Verify aspire publish rejects an untransformed resource before publish work or manifest output.

Coverage Type: Unhappy path

Status: Passed

Expected Unhappy-Path Outcome: Non-zero exit, actionable validation error, no sibling publish side effect, and no manifest.

Evidence:

  • evidence/publish-failure.log
  • evidence/publish-failure-exit-code.txt

Observations:

  • The command exited with code 6.
  • validate-dotnet-project-publish failed before marker-backed sibling publish work.
  • No aspire-manifest.json was created.
  • The message named resource plain and included all C# and TypeScript alternatives: AddProject<TProject>, AddCSharpApp/addCSharpApp, PublishAsDockerFile/publishAsDockerFile, and ExcludeFromManifest/excludeFromManifest.

Scenario 5: Plain resource deploy failure

Objective: Verify aspire deploy rejects the unsupported resource before deploy work or manifest output.

Coverage Type: Unhappy path

Status: Passed

Expected Unhappy-Path Outcome: Non-zero exit, the same actionable validation error, no sibling deploy side effect, and no manifest.

Evidence:

  • evidence/deploy-failure.log
  • evidence/deploy-failure-exit-code.txt

Observations:

  • The command exited with code 6.
  • validate-dotnet-project-publish failed before marker-backed sibling deploy work.
  • No aspire-manifest.json was created.
  • The complete singular remediation guidance was present.

Scenario 6: ExcludeFromManifest publishing

Objective: Verify an intentionally run-only resource remains a valid publish configuration.

Coverage Type: Supported alternative

Status: Passed

Steps:

  1. Created a fresh AppHost with a resource configured through ExcludeFromManifest().
  2. Ran the normal publish root.
  3. Ran publish-manifest and validated the complete manifest resource map.

Evidence:

  • evidence/excluded-publish.log
  • evidence/excluded-publish-manifest.log
  • evidence/excluded-publish-manifest.json

Observations:

  • Both pipeline invocations succeeded.
  • The generated manifest contained an empty resources object.

Scenario 7: PublishAsDockerFile publishing

Objective: Verify explicit container publishing remains supported and emits correct Dockerfile metadata.

Coverage Type: Supported alternative

Status: Passed

Steps:

  1. Created a fresh AppHost with a resource configured through PublishAsDockerFile().
  2. Ran the normal publish root.
  3. Ran publish-manifest and resolved its relative build paths.

Evidence:

  • evidence/docker-publish.log
  • evidence/docker-publish-manifest.log
  • evidence/docker-publish-manifest.json

Observations:

  • Both pipeline invocations succeeded.
  • The resource was emitted as container.v1.
  • The relative build context and Dockerfile path resolve to the scenario AppHost directory and its Dockerfile.

Scenario 8: Custom manifest callback publishing

Objective: Verify replacing the default manifest callback remains a supported explicit publishing choice.

Coverage Type: Supported alternative

Status: Passed

Steps:

  1. Created a fresh AppHost with WithManifestPublishingCallback(...).
  2. Ran the normal publish root.
  3. Ran publish-manifest and validated the emitted custom resource.

Evidence:

  • evidence/custom-publish.log
  • evidence/custom-publish-manifest.log
  • evidence/custom-publish-manifest.json

Observations:

  • Both pipeline invocations succeeded.
  • The resource was emitted with type custom.v0.

Scenario 9: Mixed-resource aggregation

Objective: Verify multiple unsupported resources are aggregated while excluded, containerized, and custom-published resources are filtered out.

Coverage Type: Boundary and unhappy path

Status: Passed

Expected Unhappy-Path Outcome: One actionable failure naming only the unsupported resources, with plural grammar and no manifest.

Evidence:

  • evidence/mixed-resources.log
  • evidence/mixed-resources-exit-code.txt

Observations:

  • The command exited with code 6.
  • The exact subject was Resources 'api', 'worker' are DotnetProjectResource instances.
  • The message used To publish these resources and If a resource is intentionally run-only.
  • The excluded, containerized, and custom-published resources were not included in the unsupported resource set.
  • No manifest was created.

Summary

Scenario Status Notes
Artifact and targeted source validation Passed Exact head verified; 39/39 tests passed
Run mode and before-start Passed Resource was Running/Healthy; marker executed
Direct build and push Passed Both roots completed and marker work executed
Publish failure Passed Exit 6; no side effect or manifest
Deploy failure Passed Exit 6; no side effect or manifest
ExcludeFromManifest Passed Empty manifest resource map
PublishAsDockerFile Passed Valid container.v1 manifest
Custom manifest callback Passed Valid custom.v0 manifest
Mixed-resource aggregation Passed Only api and worker were rejected

Overall Result

PR VERIFIED

No blocking issues were found in the tested hosting behavior.

@karolz-ms
Karol Zadora-Przylecki (karolz-ms) marked this pull request as ready for review August 10, 2026 19:57
Copilot AI review requested due to automatic review settings August 14, 2026 17:52
@karolz-ms
Karol Zadora-Przylecki (karolz-ms) force-pushed the dev/karolz/dotnet-project-resource-publish-err branch from 92c497a to 1877b81 Compare August 14, 2026 17:52
@github-actions

Copy link
Copy Markdown
Contributor

Tests selector (audit mode)

The full test matrix and all jobs still run in audit mode. The tests and jobs below are what selective CI would run under enforcement.

3 / 100 test projects · 2 jobs, from 2 changed files.

Selected test projects (3 / 100)

Aspire.Hosting.Blazor.Tests, Aspire.Hosting.Dotnet.Tests, Aspire.Playground.Tests

Selected jobs (2)

extension-e2e, typescript-api-compat


How these were chosen — grouped by what changed

🔧 src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs (changed source)
1 directly: Aspire.Hosting.Dotnet.Tests
2 via the project graph: Aspire.Hosting.Blazor.Tests (2 hops), Aspire.Playground.Tests (2 hops)

🧪 tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs (changed test)
1 directly: Aspire.Hosting.Dotnet.Tests

Job reasons

Job Triggered by
extension-e2e src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs
• affected project Aspire.Hosting.Dotnet
typescript-api-compat affected project Aspire.Hosting.Dotnet

Selection computed for commit 1877b81.

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 3 out of 3 changed files in this pull request and generated no new comments.

Suppressed comments (2)

src/Aspire.Hosting.Dotnet/DotnetProjectResource.cs:150

  • beforeStartStepNames is computed before later resources' pipeline-configuration callbacks run. If a later callback wires a publish/deploy step into BeforeStart, this callback has already added the publish validation as that step's dependency; normal Run startup will then execute the validation and fail for a plain DotnetProjectResource. Defer this reachability decision until all configuration callbacks have completed (or add a post-configuration validation phase), and cover the late-wiring case by adding a later resource callback that makes BeforeStart depend on a publish/deploy preparation step.
        var beforeStartStepNames = GetStepsRequiredByRoots(
            context.Steps,
            [WellKnownPipelineSteps.BeforeStart])
            .Select(step => step.Name)
            .ToHashSet(StringComparer.Ordinal);

        return GetStepsRequiredByRoots(context.Steps, s_publishAndDeployWorkRootStepNames, beforeStartStepNames);

tests/Aspire.Hosting.Dotnet.Tests/DotnetProjectResourceTests.cs:302

  • Setting PipelineOptions.Step to BeforeStart makes GetPublishAndDeploySteps return immediately at its selected-step guard, because BeforeStart does not reach a publish/deploy root at that point. The test therefore never exercises the shared-step exclusion on lines 141-150. Real startup calls ExecuteStepSequentiallyAsync(BeforeStart, ...) while PipelineOptions.Step remains unset, so this test can pass even when Run startup is broken. Exercise the actual before-start execution path with an unset pipeline option.
        builder.Services.Configure<PipelineOptions>(options => options.Step = WellKnownPipelineSteps.BeforeStart);

@github-actions

Copy link
Copy Markdown
Contributor

Retrying the failed CI jobs for this pull request from the CI run attempt. The rerun is being tracked in the rerun attempt.

@karolz-ms
Karol Zadora-Przylecki (karolz-ms) merged commit 065001e into main Aug 14, 2026
723 of 727 checks passed
@karolz-ms
Karol Zadora-Przylecki (karolz-ms) deleted the dev/karolz/dotnet-project-resource-publish-err branch August 14, 2026 21:42
@github-actions github-actions Bot modified the milestones: 13.5, 13.6 Aug 14, 2026
@karolz-ms

Copy link
Copy Markdown
Contributor Author

/backport to release/13.5

@github-actions

Copy link
Copy Markdown
Contributor

Started backporting to release/13.5 (link to workflow run)

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

Pull request created: #1501

Generated by PR Documentation Check · auto · 53.6 AIC · ⌖ 8.88 AIC · ⊞ 19.6K

@aspire-repo-bot

Copy link
Copy Markdown
Contributor

📝 Documentation has been drafted in microsoft/aspire.dev#1501 targeting release/13.5.

Added a ## Publishing section to integrations/frameworks/dotnet/dotnet-host.mdx, mirroring the src/Aspire.Hosting.Dotnet/README.md update in the source PR: automatic publishing for DotnetProjectResource is not supported and now fails with an actionable error instead of silently emitting a broken manifest.

  • Explains that aspire publish/aspire deploy on a plain DotnetProjectResource fails with an actionable error.
  • Lists the supported alternatives: AddProject<TProject>(...), AddCSharpApp(...)/addCSharpApp(...), PublishAsDockerFile(...)/publishAsDockerFile(...), and ExcludeFromManifest()/excludeFromManifest().

File modified: src/frontend/src/content/docs/integrations/frameworks/dotnet/dotnet-host.mdx (existing page updated, no new pages).

Note

This draft PR needs human review before merging.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-area-label An area label is needed to ensure this gets routed to the appropriate area owners

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants