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:
- AssemblyLoadContext.Default représente le contexte par défaut du runtime, qui est utilisé pour l’assembly principal de l’application et ses dépendances statiques.AssemblyLoadContext.Default represents the runtime's default context, which is used for the application main assembly and its static dependencies.
- La Assembly.LoadFile(String) méthode isole les assemblys qu’elle charge en instanciant le plus basique AssemblyLoadContext .The Assembly.LoadFile(String) method isolates the assemblies it loads by instantiating the most basic AssemblyLoadContext. Il possède un schéma d’isolation simpliste qui charge chaque assembly de manière autonome AssemblyLoadContext sans aucune résolution de dépendance.It has a simplistic isolation scheme that loads each assembly in its own AssemblyLoadContext with no dependency resolution.
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:
- 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 returnsnull
, the loader tries to load the assembly into the AssemblyLoadContext.Default. - 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 à |
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
- Document de conception AssemblyLoadContext CoreCLRAssemblyLoadContext CoreCLR design document
- Comment utiliser et déboguer la non-chargeabilité d’assembly dans .NET CoreHow to use and debug assembly unloadability in .NET Core
- Document de conception de la déchargement AssemblyLoadContextAssemblyLoadContext unloadability design document