AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext AssemblyLoadContext Class

Définition

Représente le concept du runtime d’une étendue pour la liaison.Represents the runtime's concept of a scope for binding. Cette classe est abstraite.This class is abstract.

public ref class AssemblyLoadContext abstract
public abstract class AssemblyLoadContext
type AssemblyLoadContext = class
Public MustInherit Class AssemblyLoadContext
Héritage
AssemblyLoadContextAssemblyLoadContextAssemblyLoadContextAssemblyLoadContext

Remarques

AssemblyLoadContext Représente un contexte de chargement.The AssemblyLoadContext represents a load context. Conceptuellement, un contexte de chargement crée une étendue pour le chargement, la résolution et éventuellement le déchargement d’un ensemble d’assemblys.Conceptually, a load context creates a scope for loading, resolving, and potentially unloading a set of assemblies.

AssemblyLoadContext est une classe abstraite.AssemblyLoadContext is an abstract class. AssemblyLoadContext.Load(AssemblyName) Doit être implémenté pour créer une classe concrète.The AssemblyLoadContext.Load(AssemblyName) needs to be implemented to create a concrete class.

Le AssemblyLoadContext existe principalement pour fournir l’isolation de la liaison d’assembly.The AssemblyLoadContext exists primarily to provide assembly binding isolation. Elle permet le chargement de plusieurs versions du même assembly au sein d’un même processus.It allows multiple versions of the same assembly to be loaded within a single process. Il remplace les mécanismes d’isolation fournis par AppDomain plusieurs instances dans le .NET Framework.It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

Notes

AssemblyLoadContextne fournit pas de fonctionnalités de sécurité.AssemblyLoadContext does not provide any security features. Tout le code dispose des autorisations complètes du processus.All code has full permissions of the process.

Utilisation dans le RuntimeUsage in the runtime

Le runtime implémente deux contextes de chargement d’assembly:The runtime implements two assembly load contexts:

Utilisation de l’applicationApplication usage

Une application peut créer sa propre AssemblyLoadContext solution pour créer une solution personnalisée pour les scénarios de liaison avancés.An application can create its own AssemblyLoadContext to create a custom solution for advanced binding scenarios. La personnalisation porte sur la définition de mécanismes de résolution de dépendance.The customization focuses on defining dependency resolution mechanisms.

Le AssemblyLoadContext fournit deux points d’extension pour implémenter la résolution d’assembly managée:The AssemblyLoadContext provides two extension points to implement managed assembly resolution:

  1. Le AssemblyLoadContext.Load(AssemblyName) fournit la première chance pour que AssemblyLoadContext le résolve l’assembly, le charge et le retourne.The AssemblyLoadContext.Load(AssemblyName) provides the first chance for the AssemblyLoadContext to resolve the assembly, load it and return it. Si le AssemblyLoadContext.Load(AssemblyName) retourne null, le chargeur essaiera de charger l’assembly dans le AssemblyLoadContext.Default.If the AssemblyLoadContext.Load(AssemblyName) returns null, the loader will try to load the assembly into the AssemblyLoadContext.Default.
  2. Si le AssemblyLoadContext.Default n’est pas en mesure de résoudre l’assembly, l’original AssemblyLoadContext obtient une deuxième chance de résoudre l’assembly.If the AssemblyLoadContext.Default is unable to resolve the assembly, the original AssemblyLoadContext gets a second chance to resolve the assembly. Le runtime déclenche l' Resolving événement.The runtime raises the Resolving event.

En outre, AssemblyLoadContext.LoadUnmanagedDll(String) la méthode virtuelle permet la personnalisation de la résolution de l’assembly non managé par défaut.Additionally the AssemblyLoadContext.LoadUnmanagedDll(String) virtual method allows customization of the default unmanaged assembly resolution. L’implémentation par défaut nullretourne, ce qui fait que la recherche du runtime utilise sa stratégie de recherche par défaut qui est suffisante pour la plupart des scénarios.The default implementation returns null, which causes the runtime search to use its default search policy which is sufficient for most scenarios.

Défis techniquesTechnical challenges

  • Il n’est pas possible de charger plusieurs versions du runtime dans un processus unique.It is not possible to load multiple versions of the runtime in a single process.

    Attention

    Le chargement de plusieurs copies ou d’une version différente d’un assembly d’infrastructure peut entraîner un comportement inattendu et difficile à diagnostiquer.Loading multiple copies or different versions of framework assemblies can lead to unexpected and hard to diagnose behavior.

    Conseil

    Utilisez les limites de processus avec communication à distance et/ou communication entre processus pour résoudre ce problème d’isolation.Use process boundaries with remoting and/or interprocess communication to solve this isolation problem.

  • Le minutage du chargement de l’assembly peut compliquer le test et le débogage.The timing of assembly loading can make testing and debugging difficult. Les assemblys sont généralement chargés sans que leurs dépendances soient immédiatement résolues.Assemblies are typically loaded without their dependencies immediately being resolved. Les dépendances sont chargées quand elles sont nécessaires:The dependencies are loaded as they are needed:

    • Quand le code est branches dans un assembly dépendant.When code branches into a dependent assembly.
    • Lorsque le code charge des ressources.When code loads resources.
    • Quand le code charge explicitement des assemblys.When code explicitly loads assemblies.
  • L’implémentation de AssemblyLoadContext.Load(AssemblyName) peut ajouter de nouvelles dépendances qui devront peut-être être isolées pour permettre l’existence de différentes versions.The implementation of AssemblyLoadContext.Load(AssemblyName) can add new dependencies which may need to be isolated to allow different versions to exist. L’implémentation la plus naturelle placerait ces dépendances dans le contexte par défaut.The most natural implementation would place these dependencies in the default context. Une conception soigneuse peut isoler les nouvelles dépendances.Careful design can isolate the new dependencies.

  • Le processus d’isolation de liaison crée plusieurs types avec le même nom de type.The binding isolation process creates multiple types with the same type name.

    • Cela peut entraîner des messages d’erreur confus, par exemple «le type foo. foo ne peut pas être casté en type foo. foo».This can lead to confusing error messages, for example "type Foo.Foo cannot be cast to type Foo.Foo."
    • Le marshaling à travers les limites d’isolation n’est pas trivial.Marshaling across isolation boundaries is non-trivial. Une solution classique consiste à utiliser une interface définie dans un assembly qui est chargé uniquement dans le contexte de chargement par défaut.A typical solution would be to use an interface defined in an assembly which is only loaded into the default load context.

Constructeurs

AssemblyLoadContext() AssemblyLoadContext() AssemblyLoadContext() AssemblyLoadContext()

Initialise une nouvelle instance de la classe AssemblyLoadContext.Initializes a new instance of the AssemblyLoadContext class.

AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean) AssemblyLoadContext(Boolean)

Initialise une nouvelle instance de la classe AssemblyLoadContext avec une valeur qui indique si le déchargement est activé.Initializes a new instance of the AssemblyLoadContext class with a value that indicates whether unloading is enabled.

AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean) AssemblyLoadContext(String, Boolean)

Initialise une nouvelle instance de la classe AssemblyLoadContext avec un nom et une valeur qui indique si le déchargement est activé.Initializes a new instance of the AssemblyLoadContext class with a name and a value that indicates whether unloading is enabled.

Propriétés

All All All All

Retourne une collection de toutes les instances de AssemblyLoadContext.Returns a collection of all AssemblyLoadContext instances.

Assemblies Assemblies Assemblies Assemblies

Retourne une collection des instances de Assembly chargées dans le AssemblyLoadContext.Returns a collection of the Assembly instances loaded in the AssemblyLoadContext.

CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext CurrentContextualReflectionContext

Obtient le AssemblyLoadContext défini par le dernier appel à EnterContextualReflection().Gets the AssemblyLoadContext set by the most recent call to EnterContextualReflection().

Default Default Default Default

Obtient l'objet AssemblyLoadContext par défaut.Gets the default AssemblyLoadContext. Le contexte par défaut contient l’assembly principal de l’application et ses dépendances statiques.The default context contains the main application assembly and its static dependencies.

IsCollectible IsCollectible IsCollectible IsCollectible

Obtient une valeur indiquant si ce AssemblyLoadContext peut être collecté.Gets a value that indicates whether this AssemblyLoadContext is collectible.

Name Name Name Name

Obtient le nom du AssemblyLoadContext.Get the name of the AssemblyLoadContext.

Méthodes

EnterContextualReflection() EnterContextualReflection() EnterContextualReflection() EnterContextualReflection()

Définit CurrentContextualReflectionContext à thisAssemblyLoadContext.Sets CurrentContextualReflectionContext to thisAssemblyLoadContext.

EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly) EnterContextualReflection(Assembly)

Définit CurrentContextualReflectionContext sur le AssemblyLoadContext qui a chargé l’assembly.Sets CurrentContextualReflectionContext to the AssemblyLoadContext which loaded the assembly.

Equals(Object) Equals(Object) Equals(Object) Equals(Object)

Détermine si l'objet spécifié est identique à l'objet actuel.Determines whether the specified object is equal to the current object.

(Inherited from Object)
Finalize() Finalize() Finalize() Finalize()

Autorise l’objet à tenter de libérer des ressources et d’exécuter d’autres opérations de nettoyage avant qu’il ne soit récupéré par l’opération de garbage collection.Allows the object to try to free resources and perform other cleanup operations before it's reclaimed by garbage collection.

GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String) GetAssemblyName(String)

Obtient un AssemblyName pour un chemin de l’assembly.Gets an AssemblyName for an assembly path.

GetHashCode() GetHashCode() GetHashCode() GetHashCode()

Fait office de fonction de hachage par défaut.Serves as the default hash function.

(Inherited from Object)
GetLoadContext(Assembly) GetLoadContext(Assembly) GetLoadContext(Assembly) GetLoadContext(Assembly)

Obtient le AssemblyLoadContext contenant le Assembly spécifié.Gets the AssemblyLoadContext containing the specified Assembly.

GetType() GetType() GetType() GetType()

Obtient le Type de l'instance actuelle.Gets the Type of the current instance.

(Inherited from Object)
Load(AssemblyName) Load(AssemblyName) Load(AssemblyName) Load(AssemblyName)

En cas de substitution dans une classe dérivée, permet de résoudre et de charger un assembly en fonction de son AssemblyName.When overridden in a derived class, allows an assembly to be resolved and loaded based on its AssemblyName.

LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName) LoadFromAssemblyName(AssemblyName)

Résout et charge un assembly en fonction de son AssemblyName.Resolves and loads an assembly given its AssemblyName.

LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) LoadFromAssemblyPath(String) LoadFromAssemblyPath(String)

Charge le contenu d’un fichier d’assembly sur le chemin d’accès spécifié.Loads the contents of an assembly file on the specified path.

LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String) LoadFromNativeImagePath(String, String)

Charge le contenu de l’image native d’un fichier d’assembly managé sur le chemin spécifié.Loads the contents of the native image of a managed assembly file on the specified path.

LoadFromStream(Stream) LoadFromStream(Stream) LoadFromStream(Stream) LoadFromStream(Stream)

Charge l’assembly avec une image au format COFF (Common Object File Format) contenant un assembly managé.Loads the assembly with a common object file format (COFF)-based image containing a managed assembly.

LoadFromStream(Stream, Stream) LoadFromStream(Stream, Stream) LoadFromStream(Stream, Stream) LoadFromStream(Stream, Stream)

Charge l’assembly avec une image COFF (Common Object File Format) contenant un assembly managé qui inclut éventuellement des symboles de l’assembly.Loads the assembly with a common object file format (COFF)-based image containing a managed assembly, optionally including symbols for the assembly.

LoadUnmanagedDll(String) LoadUnmanagedDll(String) LoadUnmanagedDll(String) LoadUnmanagedDll(String)

Permet à une classe dérivée de charger une bibliothèque non managée par nom.Allows derived class to load an unmanaged library by name.

LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String) LoadUnmanagedDllFromPath(String)

Charge une bibliothèque non managée à partir du chemin spécifié.Loads an unmanaged library from the specified path.

MemberwiseClone() MemberwiseClone() MemberwiseClone() MemberwiseClone()

Crée une copie superficielle de l'objet Object actuel.Creates a shallow copy of the current Object.

(Inherited from Object)
SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String) SetProfileOptimizationRoot(String)

Définit le chemin racine où sont stockés les profils d’optimisation pour ce contexte de chargement.Sets the root path where the optimization profiles for this load context are stored.

StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String) StartProfileOptimization(String)

Démarre l’optimisation du profil spécifié.Starts the profile optimization for the specified profile.

ToString() ToString() ToString() ToString()

Retourne la représentation sous forme de chaîne de ce contexte de chargement.Returns the string representation of this load context.

Unload() Unload() Unload() Unload()

Initie une opération de déchargement de ce AssemblyLoadContext.Initiates an unload of this AssemblyLoadContext.

Événements

Resolving Resolving Resolving Resolving

Se produit quand la résolution d’un assembly échoue lors d’une tentative de chargement dans ce contexte de chargement d’assembly.Occurs when the resolution of an assembly fails when attempting to load into this assembly load context.

ResolvingUnmanagedDll ResolvingUnmanagedDll ResolvingUnmanagedDll ResolvingUnmanagedDll

Se produit quand la résolution d’une bibliothèque native échoue.Occurs when the resolution of a native library fails.

Unloading Unloading Unloading Unloading

Se produit quand le AssemblyLoadContext est déchargé.Occurs when the AssemblyLoadContext is unloaded.

S’applique à

Voir aussi