You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Plugins AOT- und Trimming-kompatibel machen, damit sie in Zukunft in einem potenziellen AOT-Build verwendbar sind. Unabhängig davon verbessert Trimming-Kompatibilität die Code-Qualität und eliminiert versteckte Reflection-Abhängigkeiten.
Hinweis: Dies betrifft die Plugin-DLLs selbst, nicht den Plugin-Loader (der bleibt Reflection-basiert, siehe #40).
Ein Plugin ist trimmbar wenn der Trimmer alle nicht erreichbaren Typen sicher entfernen kann, ohne dass zur Laufzeit Fehler auftreten. Dafür muss das Plugin:
Kein Reflection für eigene Typen nutzen — kein Type.GetType(), kein Activator.CreateInstance()
[DynamicallyAccessedMembers] Annotationen an den richtigen Stellen haben
Übersicht
Plugins AOT- und Trimming-kompatibel machen, damit sie in Zukunft in einem potenziellen AOT-Build verwendbar sind. Unabhängig davon verbessert Trimming-Kompatibilität die Code-Qualität und eliminiert versteckte Reflection-Abhängigkeiten.
Hinweis: Dies betrifft die Plugin-DLLs selbst, nicht den Plugin-Loader (der bleibt Reflection-basiert, siehe #40).
Aktueller Stand
LoggerMessageIConfiguration.Bind()System.Text.JsonAssembly.LoadFrom()Was "Plugin ist trimmbar" bedeutet
Ein Plugin ist trimmbar wenn der Trimmer alle nicht erreichbaren Typen sicher entfernen kann, ohne dass zur Laufzeit Fehler auftreten. Dafür muss das Plugin:
Type.GetType(), keinActivator.CreateInstance()[DynamicallyAccessedMembers]Annotationen an den richtigen Stellen habenIConfiguration.Bind()nutzen (→ feat(sdk): Source Generator für automatische Config-Registrierung #38)<IsTrimmable>true</IsTrimmable>)Schritte
Phase 1: Grundlagen (nach #38)
<IsTrimmable>true</IsTrimmable>auf Sdk-Projekt setzen<EnableTrimAnalyzer>true</EnableTrimAnalyzer>)[DynamicallyAccessedMembers]Annotationen wo nötigPhase 2: Dependencies prüfen
Phase 3: CI-Integration
dotnet publish -p:PublishTrimmed=trueals CI-StepAbhängigkeiten
Abgrenzung
Assembly.LoadFrom(), Reflection Discovery) ist NICHT Teil dieses Issues — der bleibt dynamisch