[AOT] Fix Blazor AOT warnings
See original GitHub issueIs there an existing issue for this?
- I have searched the existing issues
Is your feature request related to a problem? Please describe the problem.
Hosting, HTTP, servers, middleware, routing, and auth were annotated for trimming in .NET 7. Projects with trimming are at https://github.com/dotnet/aspnetcore/blob/82daf67c4754ae5b1beac13d14c1b2e49b1351e8/eng/TrimmableProjects.props.
AOT adds new analysis warnings. I tested enabling AOT analysis for all trimmable projects and got 80ish warnings.
These warnings seem to fall into a bunch of categories:
- Reflection with
MakeGenericType
andMakeGenericMethod
. These methods can’t be used with value types in AOT. Fortunately, most usages are with reference types, so they can be suppressed. - Code that has been made safe during trimming effort but is only suppressed for trim warnings. Need to be suppressed for AOT warnings.
- Similar to the previous category, there is code identified as never safe (e.g. reflection-based minimal APIs). The public APIs need to be marked as unsafe. This is required so a warning is only raised if the public API is used.
- Warnings from dependency injection (mostly hosting) and System.Text.Json. Some work with Microsoft.Extensions.DependenceInjection team will be required to develop a good solution for DI safety.
- Middleware uses a lot of reflection. There is work to have source generation replace reflection here. @davidfowl might be working on this. Talk with him around middleware pipeline.
Describe the solution you’d like
Enable AOT analysis for all the projects in https://github.com/dotnet/aspnetcore/blob/82daf67c4754ae5b1beac13d14c1b2e49b1351e8/eng/TrimmableProjects.props. Most of these projects are in @adityamandaleeka space, but there are a couple of components projects for @mkArtakMSFT. Can place <EnableAOTAnalyzer>false</EnableAOTAnalyzer>
to exclude some projects temporarily.
Additional context
No response
Issue Analytics
- State:
- Created 10 months ago
- Comments:12 (12 by maintainers)
Web UI’s biggest pain point here is our JSON serialization and deserialization. To become more AOT-friendly, we need to do some work implementing
System.Text.Json
source generation into these scenarios. Getting some added performance improvements isn’t too bad of a side effect either!Web UI has a small handful of these. I agree with @eerhardt’s point of adding some insurance, but otherwise they all looked suppressible.
There were a couple warnings related to DI and following the completion of dotnet/runtime#79286 we should follow up and make sure that they are resolved. I have tracked the projects that we need to change below.
CC @mkArtakMSFT
Projects for Web UI to resolve
Both JSON and Reflection
JSON
Reflection
I enabled AOT analysis for all server-focused trimmed projects in https://github.com/dotnet/aspnetcore/pull/45604
Warnings were addressed for ASP.NET Core server-focused projects (hosting, servers, middleware, etc). AOT analysis was disabled for Blazor projects. It should be re-enabled for Blazor projects when looking at this issue.
Disabled AOT analysis projects: