A RetroSearch Logo

Home - News ( United States | United Kingdom | Italy | Germany ) - Football scores

Search Query:

Showing content from https://docs.microsoft.com/en-us/dotnet/core/dependency-loading/loading-managed below:

Managed assembly loading algorithm - .NET Core - .NET

Managed assembly loading algorithm

In this article

Managed assemblies are located and loaded with an algorithm that has various stages.

All managed assemblies except satellite assemblies and WinRT assemblies use the same algorithm.

When are managed assemblies loaded?

The most common mechanism to trigger a managed assembly load is a static assembly reference. These references are inserted by the compiler whenever code uses a type defined in another assembly. These assemblies are loaded (load-by-name) as needed by the runtime. The exact timing of when the static assembly references are loaded is unspecified. It can vary between runtime versions and is influenced by optimizations like inlining.

The direct use of the following APIs will also trigger loads:

API Description Active AssemblyLoadContext AssemblyLoadContext.LoadFromAssemblyName Load-by-name The this instance. AssemblyLoadContext.LoadFromAssemblyPath
AssemblyLoadContext.LoadFromNativeImagePath Load from path. The this instance. AssemblyLoadContext.LoadFromStream Load from object. The this instance. Assembly.LoadFile Load from path in a new AssemblyLoadContext instance The new AssemblyLoadContext instance. Assembly.LoadFrom Load from path in the AssemblyLoadContext.Default instance.
Adds an AppDomain.AssemblyResolve handler. The handler will load the assembly's dependencies from its directory. The AssemblyLoadContext.Default instance. Assembly.Load(AssemblyName)
Assembly.Load(String)
Assembly.LoadWithPartialName Load-by-name. Inferred from caller.
Prefer AssemblyLoadContext methods. Assembly.Load(Byte[])
Assembly.Load(Byte[], Byte[]) Load from object in a new AssemblyLoadContext instance. The new AssemblyLoadContext instance. Type.GetType(String)
Type.GetType(String, Boolean)
Type.GetType(String, Boolean, Boolean) Load-by-name. Inferred from caller.
Prefer Type.GetType methods with an assemblyResolver argument. Assembly.GetType If type name describes an assembly qualified generic type, trigger a Load-by-name. Inferred from caller.
Prefer Type.GetType when using assembly qualified type names. Activator.CreateInstance(String, String)
Activator.CreateInstance(String, String, Object[])
Activator.CreateInstance(String, String, Boolean, BindingFlags, Binder, Object[], CultureInfo, Object[]) Load-by-name. Inferred from caller.
Prefer Activator.CreateInstance methods taking a Type argument. Algorithm

The following algorithm describes how the runtime loads a managed assembly.

  1. Determine the active AssemblyLoadContext.

  2. For the Load-by-name methods, the active AssemblyLoadContext loads the assembly in the following priority order:

  3. For the other types of loads, the active AssemblyLoadContext loads the assembly in the following priority order:

  4. In either case, if an assembly is newly loaded, then the AppDomain.AssemblyLoad event is raised.

Collaborate with us on GitHub

The source for this content can be found on GitHub, where you can also create and review issues and pull requests. For more information, see our contributor guide.

Additional resources

In this article

Was this page helpful?


RetroSearch is an open source project built by @garambo | Open a GitHub Issue

Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo

HTML: 3.2 | Encoding: UTF-8 | Version: 0.7.4