Condividi tramite


loadFromContext MDA

Annotazioni

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

L'assistente loadFromContext al debug gestito viene attivato se un assembly viene caricato nel LoadFrom contesto. Questa situazione può verificarsi in seguito alla chiamata Assembly.LoadFrom o ad altri metodi simili.

Symptoms

L'uso di alcuni metodi del caricatore può comportare il LoadFrom caricamento degli assembly nel contesto. L'uso di questo contesto può comportare un comportamento imprevisto per la serializzazione, il cast e la risoluzione delle dipendenze. In generale, è consigliabile caricare gli assembly nel Load contesto per evitare questi problemi. È difficile determinare il contesto in cui è stato caricato un assembly senza questo assistente al debug gestito.

Motivo

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

Resolution

Configurare le applicazioni in modo che LoadFrom le chiamate non siano più necessarie. Per eseguire questa operazione, è possibile usare le tecniche seguenti:

  • Installare assembly nella Global Assembly Cache.

  • Inserire gli assembly nella ApplicationBase directory per .AppDomain Nel caso del dominio predefinito, la ApplicationBase directory è quella che contiene il file eseguibile che ha avviato il processo. Ciò potrebbe anche richiedere la creazione di un nuovo AppDomain se non è conveniente spostare l'assembly.

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

In ogni caso, il codice può essere modificato per usare il Assembly.Load metodo .

Effetto sul runtime

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

Risultato

L'assistente al debug gestito segnala che l'assembly è stato caricato nel LoadFrom contesto. Specifica il nome semplice dell'assembly e il percorso. Suggerisce anche le mitigazioni per evitare di usare il LoadFrom contesto.

Configurazione

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

Esempio

L'esempio di codice seguente illustra una situazione in grado di attivare questo 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");
        }
    }
}

Vedere anche