Dela via


Hanterad assembly-inläsningsalgoritm

Hanterade enheter hittas och laddas 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 laddas in (load-by-name) efter behov av körmiljön. 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:

API (gränssnitt för programmering av applikationer) Beskrivning Active AssemblyLoadContext
AssemblyLoadContext.LoadFromAssemblyName Load-by-name Den här instansen.
AssemblyLoadContext.LoadFromAssemblyPath
AssemblyLoadContext.LoadFromNativeImagePath
Läs in från sökvägen. Den här instansen.
AssemblyLoadContext.LoadFromStream Läs in från objekt. Den här instansen.
Assembly.LoadFile Läs in från sökväg i en ny AssemblyLoadContext-instans Den nya AssemblyLoadContext instansen.
Assembly.LoadFrom Läs in från sökvägen i AssemblyLoadContext.Default instansen.
Lägger till en AppDomain.AssemblyResolve hanterare. Hanteraren läser in sammansättningens beroenden från dess katalog.
Instansen AssemblyLoadContext.Default .
Assembly.Load(AssemblyName)
Assembly.Load(String)
Assembly.LoadWithPartialName
Load-by-name. Härledd från den som ringer.
Föredrar AssemblyLoadContext metoder.
Assembly.Load(Byte[])
Assembly.Load(Byte[], Byte[])
Läs in från objekt i en ny AssemblyLoadContext instans. Den nya AssemblyLoadContext instansen.
Type.GetType(String)
Type.GetType(String, Boolean)
Type.GetType(String, Boolean, Boolean)
Load-by-name. Härledd från den som ringer.
Föredrar Type.GetType metoder med ett assemblyResolver argument.
Assembly.GetType Om typen name beskriver en sammansättningskvalificerad allmän typ utlöser du en Load-by-name. Härledd från den som ringer.
Föredra Type.GetType när du använder sammansättningskvalificerade typnamn.
Activator.CreateInstance(String, String)
Activator.CreateInstance(String, String, Object[])
Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[])
Load-by-name. Härledd från den som ringer.
Föredrar Activator.CreateInstance metoder som tar ett Type argument.

Algoritm

Följande algoritm beskriver hur körtiden laddar in en hanterad assembly.

  1. active AssemblyLoadContextFastställ .

  2. För metoderna Load-by-nameactive laddar in assemblyn i följande prioritetsordning:

  3. För de andra typerna av laster läser activeAssemblyLoadContext in sammansättningen 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 i instansens activeAssemblyLoadContextcache-by-name.
  4. I båda fallen, om en sammansättning nyligen har lästs in, AppDomain.AssemblyLoad utlöses händelsen.