loadFromContext-MDA
Hinweis
Dieser Artikel gilt für das .NET Framework. Sie gilt nicht für neuere Implementierungen von .NET, einschließlich .NET 6 und höherer Versionen.
Der loadFromContext
-MDA (Assistent für verwaltetes Debuggen) wird aktiviert, wenn eine Assembly in den LoadFrom
-Kontext geladen wird. Diese Situation kann als Ergebnis eines Assembly.LoadFrom-Aufrufs oder anderer ähnlichen Methoden auftreten.
Symptome
Das Verwenden einiger Ladeprogrammmethoden kann dazu führen, dass Assemblys im LoadFrom
-Kontext geladen werden. Das Verwenden dieses Kontexts kann zu unerwartetem Verhalten für die Serialisierung, Umwandlung und Lösung von Abhängigkeiten führen. Im Allgemeinen wird empfohlen, dass Assemblys im Load
-Kontext geladen werden, um diese Probleme zu vermeiden. Es ist schwierig, ohne diesen MDA zu ermitteln, in welchem Kontext eine Assembly 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. im globalen Assemblycache oder in der AppDomainSetup.ApplicationBase-Eigenschaft.
Lösung
Konfigurieren Sie Anwendungen so, dass LoadFrom-Aufrufe nicht mehr benötigt werden. Hierfür können Sie die folgenden Verfahren verwenden:
Installieren Sie Assemblys im globalen Assemblycache.
Platzieren Sie Assemblys in das ApplicationBase-Verzeichnis für die AppDomain. Im Fall der Standarddomäne enthält das ApplicationBase-Verzeichnis die ausführbare Datei, die den Prozess gestartet hat. Dies erfordert möglicherweise auch das Erstellen eines neuen AppDomain, wenn es nicht möglich ist, die Assembly zu verschieben.
Fügen Sie einen Überprüfungspfad zu Ihrer Anwendungskonfigurationsdatei (.config) oder zu sekundären Anwendungsdomänen hinzu, wenn abhängige Assemblys in untergeordneten Verzeichnissen relativ zur ausführbaren Datei enthalten sind.
In jedem Fall kann der Code geändert werden, um die Assembly.Load-Methode zu verwenden.
Auswirkungen auf die Laufzeit
Der MDA hat keinen Einfluss auf die CLR. Er gibt den Kontext an, der als Ergebnis einer Ladeanforderung verwendet wurde.
Ausgabe
Der MDA meldet, dass die Assembly in den LoadFrom
-Kontext geladen wurde. Er gibt den einfachen Namen der Assembly und den Pfad an. Er weist auch auf Möglichkeiten hin, um das Verwenden 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");
}
}
}