Condividi tramite


MDA loadFromContext

L'assistente al debug gestito loadFromContext viene attivato quando un assembly viene caricato nel contesto LoadFrom. È possibile che questa situazione si verifichi in seguito alla chiamata al metodo Assembly.LoadFrom o ad altri metodi simili.

Sintomi

L'utilizzo di alcuni metodi loader può determinare il caricamento degli assembly nel contesto LoadFrom e, a sua volta, l'utilizzo di questo contesto può causare un comportamento imprevisto per la serializzazione, l'esecuzione del cast e la risoluzione delle dipendenze. Generalmente, per evitare questo problema è consigliabile caricare gli assembly nel contesto Load. Senza questo assistente è difficile stabilire il contesto in cui è stato caricato un assembly.

Causa

In genere, la causa è data dal caricamento di un assembly nel contesto LoadFrom se il caricamento è avvenuto da un percorso esterno al contesto Load, quale la Global Assembly Cache o la proprietà AppDomainSetup.ApplicationBase.

Risoluzione

Configurare le applicazioni in modo che non siano più necessarie chiamate a LoadFrom. A tale scopo, è possibile utilizzare le tecniche indicate di seguito.

  • Installare gli assembly nella Global Assembly Cache.

  • Inserire gli assembly nella directory ApplicationBase di AppDomain. Nel caso del dominio predefinito, la directory ApplicationBase corrisponde a quella che contiene il file eseguibile che ha avviato il processo. In questo caso può anche essere necessario creare un nuovo AppDomain se non è possibile spostare l'assembly.

  • Aggiungere un percorso di sondaggio al file di configurazione dell'applicazione (config) o ai domini applicazione secondari se gli assembly dipendenti si trovano nelle directory figlio dell'eseguibile.

In ogni caso, è possibile modificare il codice per utilizzare il metodo Assembly.Load.

Effetto sul runtime

L'assistente al debug gestito non produce effetti su CLR. Genera un report del contesto utilizzato in seguito a una richiesta di caricamento.

Output

L'assistente al debug gestito segnala che l'assembly è stato caricato nel contesto LoadFrom e specifica il percorso e il nome semplice dell'assembly. Fornisce inoltre suggerimenti per evitare l'utilizzo del contesto LoadFrom.

Configurazione

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

Esempio

Nell'esempio di codice riportato di seguito viene illustrata una situazione in cui è possibile attivare l'assistente al debug gestito di questo argomento.

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

Vedere anche

Concetti

Diagnostica degli errori tramite gli assistenti al debug gestito