Skip to content

Razor Class Library Build Time Serious Regression with .NET 9 SDK #59014

Open
@TimPurdum

Description

@TimPurdum

Is there an existing issue for this?

  • I have searched the existing issues

Describe the bug

Build time for a Razor Class Library with significant static assets (JavaScript files) is more than 4x slower with the .NET 9 SDK than with the .NET 8 SDK.

| SDK Version | 1st Build (after clean/restore) | 2nd Build |
|-------------|---------------------------------|-----------|
| 8.0.404     | 36.95 s                         | 23.90 s   |
| 9.0.100     | 143.5 s                         | 123.8 s   |

Expected Behavior

I would expect no such regression without changing code or at least target level. This appears to be driven mostly by the new ResolveProjectStaticWebAssets logic, which takes more than 50% of the length of the build, with a good bit of what's left being used by the other "StaticAsset" build steps.

Steps To Reproduce

  1. Make sure you have 8.0.404 and 9.0.0 SDKs installed

  2. Clone https://github.com/dymaptic/GeoBlazor

  3. In the src folder, set the global.json to

    {
      "sdk": {
        "version": "8.0.0",
        "rollForward": "latestMinor"
      }
    }
    
  4. Just to prove that these aren't related, you can delete or comment out all the custom Targets in dymaptic.GeoBlazor.Core.csproj (otherwise you do need npm and pwsh installed as well)

  5. Navigate to src/dymaptic.GeoBlazor.Core in a terminal, and run the following commands

    dotnet clean
    dotnet restore
    dotnet build -f net8.0
    dotnet build -f net8.0
    
  6. Edit the global.json file, replace 8.0.0 with 9.0.0

  7. Run the commands from step 4 again

Exceptions (if any)

No response

.NET Version

No response

Anything else?

I expect this is going to be a big issue for any other libraries that wrap significant JavaScript modules. At the very least, I need a workaround to ameliorate this regression so I can move this library to .NET 9 and beyond.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area-blazorIncludes: Blazor, Razor Components

    Type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions