AssemblyLoadContext Classe

Définition

Représente le concept du runtime d’une étendue pour le chargement d’assembly.Represents the runtime's concept of a scope for assembly loading.

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

Remarques

AssemblyLoadContextRepré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. La AssemblyLoadContext.Load(AssemblyName) méthode doit être implémentée pour créer une classe concrète.The AssemblyLoadContext.Load(AssemblyName) method needs to be implemented to create a concrete class.

AssemblyLoadContextExiste principalement pour fournir l’isolation de chargement d’assembly.The AssemblyLoadContext exists primarily to provide assembly loading 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 plusieurs AppDomain instances dans le .NET Framework.It replaces the isolation mechanisms provided by multiple AppDomain instances in the .NET Framework.

Notes

AssemblyLoadContext ne 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 des applicationsApplication usage

Une application peut créer sa propre AssemblyLoadContext solution pour créer une solution personnalisée pour des scénarios avancés.An application can create its own AssemblyLoadContext to create a custom solution for advanced 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. La AssemblyLoadContext.Load(AssemblyName) méthode fournit la première chance pour que le AssemblyLoadContext résolve, charge et retourne l’assembly.The AssemblyLoadContext.Load(AssemblyName) method provides the first chance for the AssemblyLoadContext to resolve, load, and return the assembly. Si la AssemblyLoadContext.Load(AssemblyName) méthode retourne null , le chargeur tente de charger l’assembly dans le AssemblyLoadContext.Default .If the AssemblyLoadContext.Load(AssemblyName) method returns null, the loader tries 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, la AssemblyLoadContext.LoadUnmanagedDll(String) 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 retourne null , ce qui a pour effet que la recherche du runtime utilise sa stratégie de recherche par défaut.The default implementation returns null, which causes the runtime search to use its default search policy. La stratégie de recherche par défaut est suffisante pour la plupart des scénarios.The default search policy 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 des limites de processus avec communication à distance ou communication interprocessus pour résoudre ce problème d’isolation.Use process boundaries with remoting 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 that 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 même assembly est chargé plusieurs fois dans des contextes différents.The same assembly is loaded multiple times into different contexts.

    • Cela peut entraîner des messages d’erreur confus, par exemple « impossible d’effectuer un cast d’un objet de type’Sample. plug-in en type’Sample. plug-in ».This can lead to confusing error messages, for example "Unable to cast object of type 'Sample.Plugin' to type 'Sample.Plugin'".
    • 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 uniquement chargé dans le contexte de chargement par défaut.A typical solution is to use an interface defined in an assembly that's only loaded into the default load context.

Constructeurs

AssemblyLoadContext()

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

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)

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

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

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

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

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

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

Name

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

Méthodes

EnterContextualReflection()

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

EnterContextualReflection(Assembly)

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

Equals(Object)

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

(Hérité de Object)
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)

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

GetHashCode()

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

(Hérité de Object)
GetLoadContext(Assembly)

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

GetType()

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

(Hérité de Object)
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)

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

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)

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)

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)

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)

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)

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

MemberwiseClone()

Crée une copie superficielle du Object actuel.Creates a shallow copy of the current Object.

(Hérité de Object)
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)

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

ToString()

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

ToString()

Retourne une chaîne qui représente l'objet actuel.Returns a string that represents the current object.

(Hérité de Object)
Unload()

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

Événements

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

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

Unloading

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

S’applique à

Voir aussi