Algoritm för inläsning av hanterad sammansättning
Hanterade sammansättningar finns och läses in med en algoritm som har olika faser.
Alla hanterade sammansättningar utom satellitsammansättningar och WinRT
sammansättningar använder samma algoritm.
När läses hanterade sammansättningar in?
Den vanligaste mekanismen för att utlösa en hanterad sammansättningsbelastning är en referens för statisk sammansättning. Dessa referenser infogas av kompilatorn när koden använder en typ som definierats i en annan sammansättning. Dessa sammansättningar läses in (load-by-name
) efter behov av körningen. Den exakta tidpunkten för när de statiska sammansättningsreferenserna läses in är ospecificerad. Det kan variera mellan körningsversioner och påverkas av optimeringar som inlining.
Direkt användning av följande API:er utlöser också belastningar:
Algoritm
Följande algoritm beskriver hur körningen läser in en hanterad sammansättning.
active
AssemblyLoadContextFastställ .- För en referens för
active
AssemblyLoadContext statisk sammansättning är den instans som läste in den refererande sammansättningen. - Önskade API:er gör det
active
AssemblyLoadContext explicit. - Andra API:er härleder
active
AssemblyLoadContext. För dessa API:er används egenskapen AssemblyLoadContext.CurrentContextualReflectionContext . Om dess värde ärnull
används den härledda instansen AssemblyLoadContext . - Se tabellen i avsnittet När läses hanterade sammansättningar in?
- För en referens för
Load-by-name
För metodernaactive
AssemblyLoadContext läser sammansättningen in i följande prioritetsordning:- Kontrollera dess
cache-by-name
. - Anropa funktionen AssemblyLoadContext.Load.
- Kontrollera instansens AssemblyLoadContext.Default cacheminne och kör standardlogik för avsökning av hanterad sammansättning. Om en sammansättning nyligen har lästs in läggs en referens till i instansens AssemblyLoadContext.Default
cache-by-name
. - Höj händelsen AssemblyLoadContext.Resolving för den aktiva AssemblyLoadContext.
- Höj händelsen AppDomain.AssemblyResolve .
- Kontrollera dess
För de andra typerna av belastningar
active
AssemblyLoadContext läser sammansättningen in i följande prioritetsordning:- Kontrollera dess
cache-by-name
. - Läs in från den angivna sökvägen eller det råa sammansättningsobjektet. Om en sammansättning nyligen har lästs in läggs en referens till i instansens
active
AssemblyLoadContextcache-by-name
.
- Kontrollera dess
I båda fallen, om en sammansättning nyligen har lästs in, AppDomain.AssemblyLoad utlöses händelsen.