← вернуться в ленту
NOTE29 мая 2025· .NET· Medium

Тримминг и АОТ в .net и аттрибуты, которые могут не помочь

Подстрахуем свой код к миграци на AOT или включению тримминга.

Очень распростаненный кейс помечать методы, которые могут "поплыть " при аот или тримминге аттрибутами, ендпоинты приложения:

[RequiresDynamicCode("MapPost(String, Delegate)")] // анализатор преудпредить IL3050, но код все равно может упасть пр аот
[RequiresUnreferencedCode(
"Calls MapPost(String, Delegate)")] // IL2026 прудпреждение, но при тримминге PublishTrimmed=true (или том же аот) мы ловим MissingMethodException или null



По факту проблема не решается, а переносится на вызывающий код. Скорее всего это будет Program.cs


Как сделать оптимальней, если у нас есть .net 8+, на примере ендпоинтов


  1. Включить Request Delegate Generatro (RDG)
<PropertyGroup>
<PublishAot>true</PublishAot>
<EnableRequestDelegateGenerator>true</EnableRequestDelegateGenerator>
</PropertyGroup>



2.

А если JSON сериализация то можно так:


[JsonSerializable(typeof(HelloDemoRequest))]
[JsonSerializable(typeof(HelloDemoResponse))] // тип, который возвращает непосредственно ответ
internal partial class AppJsonContext : JsonSerializerContext;

builder.Services.ConfigureHttpJsonOptions(o =>
o.SerializerOptions.TypeInfoResolverChain.Insert(0, AppJsonContext.Default));


И нам никаких аттрибутов не нужно уже и мы уже точно решим потенциальные проблемы