Freigeben über


loadFromContext MDA

Hinweis

Dieser Artikel ist spezifisch für .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.

Der loadFromContext verwaltete Debugging-Assistent (Managed Debugging Assistant, MDA) wird aktiviert, wenn eine Assembly in den LoadFrom Kontext geladen wird. Diese Situation kann aufgrund des Aufrufens Assembly.LoadFrom oder anderer ähnlicher Methoden auftreten.

Symptome

Die Verwendung einiger Lademethoden kann dazu führen, dass Assemblys im LoadFrom Kontext geladen werden. Die Verwendung dieses Kontexts kann zu unerwartetem Verhalten für serialisierung, Umwandlung und Abhängigkeitsauflösung führen. Im Allgemeinen wird empfohlen, Assemblys in den Load Kontext zu laden, um diese Probleme zu vermeiden. Es ist schwierig zu ermitteln, in welchen Kontext eine Assembly ohne diesen MDA geladen wurde.

Ursache

Im Allgemeinen wurde eine Assembly in den LoadFrom Kontext geladen, wenn sie aus einem Pfad außerhalb des Load Kontexts geladen wurde, z. B. den globalen Assemblycache oder die AppDomainSetup.ApplicationBase Eigenschaft.

Resolution

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

  • Installieren Sie Assemblys im globalen Assemblycache.

  • Platzieren Sie Assemblys im ApplicationBase Verzeichnis für die AppDomain. Im Fall der Standarddomäne ist das Verzeichnis das Verzeichnis, das ApplicationBase die ausführbare Datei enthält, die den Prozess gestartet hat. Dies kann auch erforderlich sein, wenn AppDomain es nicht bequem ist, die Assembly zu verschieben.

  • Fügen Sie ihrer Anwendungskonfigurationsdatei (.config) oder sekundären Anwendungsdomänen einen Probingpfad hinzu, wenn abhängige Assemblys in untergeordneten Verzeichnissen relativ zur ausführbaren Datei vorhanden sind.

In jedem Fall kann der Code geändert werden, um die Assembly.Load Methode zu verwenden.

Effekt auf die Laufzeit

Die MDA wirkt sich nicht auf die CLR aus. Er meldet den Kontext, der als Ergebnis einer Ladeanforderung verwendet wurde.

Output

Die MDA meldet, dass die Assembly in den LoadFrom Kontext geladen wurde. Er gibt den einfachen Namen der Assembly und des Pfads an. Es schlägt auch Gegenmaßnahmen vor, um die Verwendung des LoadFrom Kontexts zu vermeiden.

Konfiguration

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

Beispiel

Im folgenden Codebeispiel wird eine Situation veranschaulicht, in der diese MDA aktiviert werden 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