AssemblyLoadContext Classe
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
Représente le concept du runtime d’une étendue pour le chargement d’assembly.
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
Le AssemblyLoadContext représente un contexte de chargement. Conceptuellement, un contexte de chargement crée une portée pour le chargement, la résolution et éventuellement le déchargement d'un ensemble d'assemblages.
Le AssemblyLoadContext existe principalement pour fournir une isolation du chargement d'assemblages. Il permet à plusieurs versions du même assembly d’être chargées dans un seul processus. Il remplace les mécanismes d’isolation fournis par plusieurs AppDomain instances dans .NET Framework.
Note
- AssemblyLoadContext ne fournit aucune fonctionnalité de sécurité. Tout le code dispose d’autorisations complètes du processus.
- Dans .NET Core 2.0 - 2.2 uniquement, AssemblyLoadContext est une classe abstraite. Pour créer une classe concrète dans ces versions, implémentez la AssemblyLoadContext.Load(AssemblyName) méthode.
Utilisation dans le runtime
Le runtime implémente deux contextes de chargement d’assembly :
- AssemblyLoadContext.Default représente le contexte par défaut du runtime, utilisé pour l’assembly principal de l’application et ses dépendances statiques.
- La méthode Assembly.LoadFile(String) isole les assemblys qu'elle charge en instanciant le AssemblyLoadContext le plus basique. Elle dispose d'un système d’isolation simpliste qui charge chaque assembly dans son propre AssemblyLoadContext sans résolution des dépendances.
Utilisation de l’application
Une application peut créer sa propre AssemblyLoadContext solution personnalisée pour des scénarios avancés. La personnalisation se concentre sur la définition des mécanismes de résolution des dépendances.
Le AssemblyLoadContext offre deux points d'extension pour implémenter la résolution d’assembly managé :
- La méthode AssemblyLoadContext.Load(AssemblyName) offre la première occasion au AssemblyLoadContext de résoudre, charger et renvoyer l'assembly. Si la AssemblyLoadContext.Load(AssemblyName) méthode retourne
null, le chargeur tente de charger l’assembly dans le AssemblyLoadContext.Default. - Si l’assembly AssemblyLoadContext.Default ne peut pas être résolu, l’original AssemblyLoadContext obtient une deuxième chance de résoudre l’assembly. Le runtime déclenche l’événement Resolving .
En outre, la méthode virtuelle AssemblyLoadContext.LoadUnmanagedDll(String) autorise la personnalisation de la résolution d’assembly non gérée par défaut. L’implémentation par défaut retourne null, ce qui entraîne l’utilisation de sa stratégie de recherche par défaut. La stratégie de recherche par défaut est suffisante pour la plupart des scénarios.
Défis techniques
Il n’est pas possible de charger plusieurs versions du runtime dans un seul processus.
Avertissement
Le chargement de plusieurs copies ou différentes versions d’assemblys d’infrastructure peut entraîner un comportement inattendu et difficile à diagnostiquer.
Conseil / Astuce
Utilisez des limites de processus avec la communication à distance ou interprocessus pour résoudre ce problème d’isolation.
Le moment du chargement de l'assembly peut compliquer les tests et le débogage. Les assemblys sont généralement chargés sans que leurs dépendances soient immédiatement résolues. Les dépendances sont chargées, car elles sont nécessaires :
- Lorsque le code se ramifie dans un assembly dépendant.
- Lorsque le code charge des ressources.
- Lorsque le code charge explicitement des assemblys.
L'implémentation de AssemblyLoadContext.Load(AssemblyName) peut ajouter de nouvelles dépendances qui pourraient avoir besoin d'être isolées pour permettre l'existence de différentes versions. L’implémentation la plus naturelle place ces dépendances dans le contexte par défaut. Une conception minutieuse peut isoler les nouvelles dépendances.
Le même assembly est chargé plusieurs fois dans différents contextes.
- Cela peut entraîner des messages d’erreur confus, par exemple « Impossible de convertir l’objet de type « Sample.Plugin » en type « Sample.Plugin ».
- Le marshaling entre les limites d'isolement n'est pas une mince affaire. Une solution classique consiste à utiliser une interface définie dans un assembly qui est uniquement chargé dans le contexte de chargement par défaut.
Constructeurs
| Nom | Description |
|---|---|
| AssemblyLoadContext() |
Initialise une nouvelle instance de la classe AssemblyLoadContext. |
| AssemblyLoadContext(Boolean) |
Initialise une nouvelle instance de la AssemblyLoadContext classe avec une valeur qui indique si le déchargement est activé. |
| AssemblyLoadContext(String, Boolean) |
Initialise une nouvelle instance de la AssemblyLoadContext classe avec un nom et une valeur qui indique si le déchargement est activé. |
Propriétés
| Nom | Description |
|---|---|
| All |
Retourne une collection de toutes les AssemblyLoadContext instances. |
| Assemblies |
Retourne une collection des Assembly instances chargées dans le AssemblyLoadContext. |
| CurrentContextualReflectionContext |
Obtient l’ensemble par l’appel AssemblyLoadContext le plus récent à EnterContextualReflection(). |
| Default |
Obtient la valeur par défaut AssemblyLoadContext. Le contexte par défaut contient l’assembly d’application principal et ses dépendances statiques. |
| IsCollectible |
Obtient une valeur qui indique s’il s’agit AssemblyLoadContext d’une collection. |
| Name |
Obtenez le nom du AssemblyLoadContext. |
Méthodes
| Nom | Description |
|---|---|
| EnterContextualReflection() |
Définit CurrentContextualReflectionContext sur |
| EnterContextualReflection(Assembly) |
Définit CurrentContextualReflectionContext l’assembly AssemblyLoadContext chargé. |
| Equals(Object) |
Détermine si l’objet spécifié est égal à l’objet actuel. (Hérité de Object) |
| Finalize() |
Permet à l’objet d’essayer de libérer des ressources et d’effectuer d’autres opérations de nettoyage avant qu’il ne soit récupéré par le garbage collection. |
| GetAssemblyName(String) |
Obtient un AssemblyName chemin d’accès d’assembly. |
| GetHashCode() |
Sert de fonction de hachage par défaut. (Hérité de Object) |
| GetLoadContext(Assembly) |
Obtient le AssemblyLoadContext conteneur spécifié Assembly. |
| GetType() |
Obtient la Type de l’instance actuelle. (Hérité de Object) |
| Load(AssemblyName) |
En cas de substitution dans une classe dérivée, permet à un assembly d’être résolu en fonction de son AssemblyName. |
| LoadFromAssemblyName(AssemblyName) |
Résout et charge un assembly en fonction de son AssemblyName. |
| LoadFromAssemblyPath(String) |
Charge le contenu d’un fichier d’assembly sur le chemin d’accès spécifié. |
| LoadFromNativeImagePath(String, String) |
Charge le contenu de l’image native d’un fichier d’assembly managé sur le chemin d’accès spécifié. |
| LoadFromStream(Stream, Stream) |
Charge l’assembly avec une image COFF (Common Object File Format) contenant un assembly managé, y compris éventuellement des symboles pour l’assembly. |
| LoadFromStream(Stream) |
Charge l’assembly avec une image COFF (Common Object File Format) contenant un assembly managé. |
| LoadUnmanagedDll(String) |
Permet à la classe dérivée de charger une bibliothèque non managée par nom. |
| LoadUnmanagedDllFromPath(String) |
Charge une bibliothèque non managée à partir du chemin d’accès spécifié. |
| MemberwiseClone() |
Crée une copie superficielle du Objectactuel. (Hérité de Object) |
| SetProfileOptimizationRoot(String) |
Définit le chemin d’accès racine où sont stockés les profils d’optimisation pour ce contexte de charge. |
| StartProfileOptimization(String) |
Démarre l’optimisation du profil pour le profil spécifié. |
| ToString() |
Retourne la représentation sous forme de chaîne de ce contexte de charge. |
| ToString() |
Retourne une chaîne qui représente l’objet actuel. (Hérité de Object) |
| Unload() |
Lance un déchargement de ce AssemblyLoadContext. |
Événements
| Nom | Description |
|---|---|
| Resolving |
Se produit lorsque la résolution d’un assembly échoue lors de la tentative de chargement dans ce contexte de chargement d’assembly. |
| ResolvingUnmanagedDll |
Se produit lorsque la résolution d’une bibliothèque native échoue. |
| Unloading |
Se produit lorsque le AssemblyLoadContext chargement est déchargé. |