Share via


loadFromContext-MDA

Aktualisiert: November 2007

Der loadFromContext-MDA (Managed Debugging Assistant, Assistent für verwaltetes Debuggen) wird aktiviert, wenn eine Assembly in den LoadFrom-Kontext geladen wird. Dazu kann es als Ergebnis eines Aufrufs von Assembly.LoadFrom oder anderer ähnlicher Methoden kommen.

Symptome

Die Verwendung einiger Ladeprogrammmethoden kann dazu führen, dass Assemblys in den LoadFrom-Kontext geladen werden. Die Verwendung dieses Kontexts kann zu unerwartetem Verhalten für die Serialisierung, Umwandlung und Auflösung von Abhängigkeiten führen. Im Allgemeinen wird empfohlen, dass Assemblys in den Load-Kontext geladen werden, um diese Probleme zu vermeiden. Ohne diesen MDA kann nur schwer festgestellt werden, in welchen Kontext eine Assembly geladen wurde.

Ursache

Allgemein ausgedrückt wurde eine Assembly in den LoadFrom-Kontext geladen, wenn sie aus einem Pfad außerhalb des Load-Kontexts, beispielsweise aus dem globalen Assemblycache oder der AppDomainSetup.ApplicationBase-Eigenschaft geladen wurde.

Lösung

Konfigurieren Sie Anwendungen so, dass LoadFrom-Aufrufe nicht mehr benötigt werden. Sie können hierzu die folgenden Techniken verwenden:

  • Installieren Sie Assemblys im globalen Assemblycache.

  • Legen Sie Assemblys im Verzeichnis ApplicationBase von AppDomain ab. Im Fall der Standarddomäne befindet sich die ausführbare Datei, mit der der Prozess gestartet wurde, im Verzeichnis ApplicationBase. Möglicherweise ist es erforderlich, eine neue AppDomain zu erstellen, wenn die Assembly nicht ohne weiteres verschoben werden kann.

  • Fügen Sie der Konfigurationsdatei der Anwendung (CONFIG-Datei) oder zusätzlichen Anwendungsdomänen einen Testpfad hinzu, wenn sich abhängige Assemblies in relativ zur Programmdatei gelegenen Unterverzeichnissen befinden.

In jedem Fall kann der Programmcode so geändert werden, dass die Assembly.Load-Methode verwendet wird.

Auswirkungen auf die Laufzeit

Der MDA hat keine Auswirkungen auf die CLR. Es wird der Kontext gemeldet, der als Ergebnis einer Ladeanforderung verwendet wurde.

Ausgabe

Der MDA meldet, dass die Assembly in den LoadFrom-Kontext geladen wurde. Dabei wird der einfache Name der Assembly und der Pfad angegeben. Es werden auch Gegenmaßnahmen vorgeschlagen, um die Verwendung des LoadFrom-Kontexts zu vermeiden.

Konfiguration

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

Beispiel

Im folgenden Codebeispiel wird eine Situation veranschaulicht, die zum Aktivieren dieses MDA führen kann:

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

Siehe auch

Konzepte

Diagnostizieren von Fehlern mit Assistenten für verwaltetes Debuggen