Skip to content

[release/11.0-preview3] Fix publish-time Framework materialization for multi-client WASM and add test#126378

Open
github-actions[bot] wants to merge 7 commits intorelease/11.0-preview3from
backport/pr-126211-to-release/11.0-preview3
Open

[release/11.0-preview3] Fix publish-time Framework materialization for multi-client WASM and add test#126378
github-actions[bot] wants to merge 7 commits intorelease/11.0-preview3from
backport/pr-126211-to-release/11.0-preview3

Conversation

@github-actions
Copy link
Copy Markdown
Contributor

Backport of #126211 to release/11.0-preview3

/cc @lewing

Customer Impact

  • Customer reported
  • Found internally

[Select one or both of the boxes. Describe how this issue impacts customers, citing the expected and actual behaviors and scope of the issue. If customer-reported, provide the issue number.]

Regression

  • Yes
  • No

[If yes, specify when the regression was introduced. Provide the PR or commit if known.]

Testing

[How was the fix verified? How was the issue missed previously? What tests were added?]

Risk

[High/Medium/Low. Justify the indication by mentioning how risks were measured and addressed.]

IMPORTANT: If this backport is for a servicing release, please verify that:

  • For .NET 8 and .NET 9: The PR target branch is release/X.0-staging, not release/X.0.
  • For .NET 10+: The PR target branch is release/X.0 (no -staging suffix).

Package authoring no longer needed in .NET 9

IMPORTANT: Starting with .NET 9, you no longer need to edit a NuGet package's csproj to enable building and bump the version.
Keep in mind that we still need package authoring in .NET 8 and older versions.

lewing and others added 7 commits March 31, 2026 22:28
…lization

Add a proper BlazorMultiClientHosted test asset with two distinct WASM
client projects (Client1, Client2) and a server project, each with
unique content and StaticWebAssetBasePath. This replaces the synthetic
test setup that cloned BlazorBasicTestApp and deleted files to avoid
collisions.

The test validates that Framework SourceType materialization produces
per-project Identity values that work correctly through both the build
and publish pipelines.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…asset name

The test harness expects a .csproj named after the TestAsset.Name property
('BlazorMultiClientHosted') in the RunnableProjectSubPath directory.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Match the pattern used by all other wasm test assets (BlazorBasicTestApp,
BlazorWebWasm, etc.) which hardcode net11.0 and explicit package versions
rather than relying on undefined MSBuild properties.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The build path captures PassThroughCandidates from ConvertDllsToWebcil and
routes them through DefineStaticWebAssets(SourceType=Framework) +
UpdatePackageStaticWebAssets for per-project materialization. The publish
path was missing this — pass-through assets (like HotReload dlls) kept
their raw SDK path, causing duplicate Identity crashes in
ApplyCompressionNegotiation for multi-client hosted Blazor WASM publish.

Mirror the build-time pattern: capture PassThroughCandidates, remove them
from webcil candidates, define as Framework assets, and materialize to
per-project paths.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
CopyTestAsset already initializes _logPath via InitPaths, which creates
the per-test log directory under s_buildEnv.LogRootPath. Use it instead
of manually creating a separate directory.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Two fixes to prevent ComputeWasmPublishAssets from replacing Framework-
materialized per-project assets with shared SDK-path originals:

1. Browser.targets: Filter CopyToPublishDirectory=Never items from
   _WasmResolvedFilesToPublish (defense-in-depth for when metadata
   survives through ResolvedFileToPublish).

2. ComputeWasmPublishAssets.cs: In ComputeUpdatedAssemblies, skip
   replacement of Framework-materialized assets (SourceType=Discovered
   under obj/fx/). These have unique per-project paths from
   UpdatePackageStaticWebAssets that must be preserved. Without this,
   both clients in a multi-client hosted scenario get their materialized
   copies replaced by the same raw SDK path, causing a duplicate key
   crash in ApplyCompressionNegotiation.

Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant