Assistant Débogage managé loadFromContext
Remarque
Cet article est spécifique au .NET Framework. Elle ne s’applique pas aux implémentations plus récentes de .NET, notamment .NET 6 et versions ultérieures.
L’Assistant Débogage managé loadFromContext
est activé si un assembly est chargé dans le contexte LoadFrom
. Cette situation peut se produire suite à l’appel Assembly.LoadFrom ou d’autres méthodes similaires.
Symptômes
L’utilisation de certaines méthodes de chargeur peut aboutir au chargement des assemblys dans le contexte LoadFrom
. L’utilisation de ce contexte peut entraîner un comportement inattendu de la sérialisation, des opérations de cast et de la résolution des dépendances. En règle générale, il est recommandé de charger les assemblys dans le contexte Load
pour éviter ces problèmes. Il est difficile de déterminer le contexte dans lequel un assembly a été chargé sans cet Assistant Débogage managé.
Cause
En règle générale, un assembly a été chargé dans le contexte LoadFrom
s’il a été chargé à partir d’un chemin en dehors du contexte Load
, comme le Global Assembly Cache ou la propriété AppDomainSetup.ApplicationBase.
Résolution
Configurez les applications pour que les appels de LoadFrom ne soient plus nécessaires. Vous pouvez pour cela utiliser les techniques suivantes :
Installez les assemblys dans le Global Assembly Cache.
Placez les assemblys dans le répertoire ApplicationBase pour AppDomain. Dans le cas le domaine par défaut, le répertoire ApplicationBase est celui qui contient le fichier exécutable qui a démarré le processus. Ceci peut également nécessiter la création d’un AppDomain s’il n’est pas pratique de déplacer l’assembly.
Ajoutez un chemin de détection au fichier de configuration (.config) de votre application ou aux domaines d’application secondaires si les assemblys dépendants se trouvent dans des répertoires enfants par rapport à l’exécutable.
Dans chaque cas, le code peut être changé de façon à utiliser la méthode Assembly.Load.
Effet sur le runtime
L’Assistant Débogage managé n’a pas d’effet sur le CLR. Il indique le contexte qui a été utilisé à la suite d’une demande de chargement.
Sortie
L’Assistant Débogage managé signale que l’assembly a été chargé dans le contexte LoadFrom
. Il spécifie le nom simple de l’assembly et le chemin. Il suggère également des mesures de limitation des risques pour éviter d’utiliser le contexte LoadFrom
.
Configuration
<mdaConfig>
<assistants>
<loadFromContext />
</assistants>
</mdaConfig>
Exemple
L’exemple de code suivant illustre une situation qui peut activer cet Assistant Débogage managé :
using System.Reflection;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
// The following call caused the LoadFrom context to be used
// because the assembly is loaded using LoadFrom and the path is
// located outside of the Load context probing path.
Assembly.LoadFrom(@"C:\Text\Test.dll");
}
}
}