Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
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");
}
}
}