Blazor Hybrid Windows publish still copies precompressed .gz and .br assets from referenced RCLs into publish/wwwroot

Open
#70,394 1 comment 0 reactions 0 assignees View on GitHub

Maintainers usually reply within 1 day

Nobody has claimed this yet.

Assessment

Difficulty
4/5
Estimated time
3-5 days
Newbie friendliness
56/100
Issue type
Bug
Clarity
Clearly specified
Activity status
Active
Tech stack
csharp
Domain
build-system

Research direction

Start by tracing GeneratePublishCompressedStaticWebAssets and _PublishStaticWebAssetsPreserveNewest in the publish targets, then compare how the existing ConvertStaticWebAssetsToMauiAssets filtering handles AssetRole="Alternative" assets. Reproduce with a MAUI Blazor Hybrid app that references an RCL and inspect its published wwwroot/_content/<Rcl>/ directory. Done means publishing with CompressionEnabled=false leaves only the uncompressed RCL assets.

Written by the indexing model from the issue text.

Description

area-blazor bug
Description

Blazor Hybrid sets <CompressionEnabled>false</CompressionEnabled> (via Microsoft.AspNetCore.Components.WebView's StaticWebAssets.Groups.targets) because WebViewManager serves static assets locally without HTTP content-encoding negotiation. However, when a Blazor Hybrid app references a Razor class library (ProjectReference), the RCL still builds with CompressionEnabled=true by default and contributes precompressed .gz and .br (AssetRole="Alternative") static web assets to the consuming app's publish manifest.

While https://github.com/dotnet/maui/pull/33917 (for https://github.com/dotnet/maui/issues/33773) filtered AssetRole='Alternative' .gz/.br items out of @(MauiAsset) in ConvertStaticWebAssetsToMauiAssets (fixing Android APKs), it did not remove them from @(StaticWebAsset) / _PublishStaticWebAssetsPreserveNewest. As a result, publishing a Blazor Hybrid app on Windows (MAUI Windows, WPF, or WinForms) still runs GeneratePublishCompressedStaticWebAssets (Brotli) for the RCL and copies redundant .gz and .br files for every RCL asset into publish/wwwroot/_content/<Rcl>/.

Discovered during validation testing in https://github.com/dotnet/aspnetcore/issues/68814#issuecomment-5536899858.

Steps to Reproduce
  1. Create a new MAUI Blazor Hybrid app and a Razor Class Library from templates and reference the RCL:
    dotnet new maui-blazor -n MauiHybridApp
    dotnet new razorclasslib -n MyRcl
    dotnet add MauiHybridApp/MauiHybridApp.csproj reference MyRcl/MyRcl.csproj
    
  2. Publish the MAUI app for Windows:
    dotnet publish MauiHybridApp/MauiHybridApp.csproj -c Release -f net11.0-windows10.0.19041.0
    
  3. Inspect MauiHybridApp/bin/Release/net11.0-windows10.0.19041.0/win-x64/publish/wwwroot/_content/MyRcl/.
  4. Expected: Only uncompressed RCL assets (exampleJsInterop.js, MyRcl.<hash>.bundle.scp.css, background.png) are published when CompressionEnabled=false.
  5. Actual: Precompressed .gz and .br files (exampleJsInterop.js.gz, exampleJsInterop.js.br, MyRcl.<hash>.bundle.scp.css.gz, MyRcl.<hash>.bundle.scp.css.br) are also copied into publish/wwwroot/_content/MyRcl/.
Dominant language
C#
Stars
38.5k
Forks
11.6k
Avg merge
3d 1h
Merged PRs (30d)
289

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 dotnet/aspnetcore

All issues in dotnet/aspnetcore

Similar issues

More C# issues

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.