Condividi tramite


MDA loadFromContext

Nota

Questo articolo è specifico per .NET Framework. Non si applica alle implementazioni più recenti di .NET, incluse .NET 6 e versioni successive.

L'assistente al debug gestito loadFromContext viene attivato se viene caricato un assembly nel contesto LoadFrom. Questa situazione può verificarsi come risultato di una chiamata di Assembly.LoadFrom o di altri metodi simili.

Sintomi

L'uso di alcuni metodi di caricamento può determinare il caricamento di un assembly nel contesto LoadFrom. L'uso di questo contesto può provocare un comportamento imprevisto per la serializzazione, il cast e la risoluzione delle dipendenze. In generale, per evitare problemi è preferibile che gli assembly vengano caricati nel contesto Load. Senza questo assistente al debug gestito, è difficile determinare il contesto in cui è stato caricato un assembly.

Causa

In genere, un assembly viene caricato nel contesto LoadFrom se è stato caricato da un percorso esterno al contesto Load, ad esempio la Global Assembly Cache o la proprietà AppDomainSetup.ApplicationBase.

Risoluzione

Configurare le applicazioni in modo che non siano più necessarie chiamate di LoadFrom. A questo scopo, è possibile usare le tecniche seguenti:

  • Installare gli assembly nella Global Assembly Cache.

  • Inserire gli assembly nella directory ApplicationBase per AppDomain. Nel caso del dominio predefinito, la directory ApplicationBase è quella che contiene il file eseguibile che ha avviato il processo. In questo caso, può essere necessaria anche la creazione di un nuovo oggetto AppDomain se non si vuole spostare l'assembly.

  • Aggiungere un percorso di sondaggio al file di configurazione dell'applicazione (con estensione config) o ai domini dell'applicazione secondari se nelle directory figlio relative al file eseguibile sono presenti assembly dipendenti.

In ogni caso, il codice può essere modificato in modo da usare il metodo Assembly.Load.

Effetto sull'ambiente di esecuzione

L'assistente al debug gestito non ha alcun effetto su CLR e segnala il contesto usato come risultato di una richiesta di caricamento.

Output

L'assistente al debug gestito segnala che l'assembly è stato caricato nel contesto LoadFrom, specifica il nome semplice dell'assembly e il percorso e suggerisce anche le misure di prevenzione per evitare di usare il contesto LoadFrom.

Impostazione

<mdaConfig>
  <assistants>
    <loadFromContext />
  </assistants>
</mdaConfig>

Esempio

L'esempio di codice seguente mostra una situazione che può comportare l'attivazione dell'assistente al debug gestito:

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");
        }
    }
}

Vedi anche