Freigeben über


Standardabtastung

Die AssemblyLoadContext.Default-Instanz ist für das Suchen der Abhängigkeiten einer Assembly verantwortlich. In diesem Artikel wird die Probinglogik der AssemblyLoadContext.Default Instanz beschrieben.

Vom Host konfigurierte Überprüfungseigenschaften

Wenn die Laufzeit gestartet wird, stellt der Laufzeithost einen Satz benannter Eigenschaften bereit, die AssemblyLoadContext.Default-Probepfade konfigurieren.

Jede der Überprüfungseigenschaften ist optional. Wenn vorhanden, ist jede Eigenschaft ein Zeichenfolgenwert, der eine durch Trennzeichen getrennte Liste absoluter Pfade enthält. Das Trennzeichen ist ";" unter Windows und ":" auf allen anderen Plattformen.

Objektname Description
TRUSTED_PLATFORM_ASSEMBLIES Liste der Plattform- und Anwendungsassembly-Dateipfade
PLATFORM_RESOURCE_ROOTS Liste der Verzeichnispfade für die Suche nach Satellitenressourcenassemblys
NATIVE_DLL_SEARCH_DIRECTORIES Liste von Verzeichnispfaden, in denen nach nicht verwalteten (Native-)Bibliotheken gesucht werden soll.
APP_PATHS Liste der Verzeichnispfade, in denen nach verwalteten Assemblys gesucht wird.

Wie werden diese Eigenschaften aufgefüllt?

Es gibt zwei Hauptszenarien zum Auffüllen der Eigenschaften, je nachdem, ob die <Myapp>.deps.json Datei vorhanden ist.

  • Wenn die Datei *.deps.json vorhanden ist, wird sie analysiert, um die Testeigenschaften aufzufüllen.
  • Wenn die Datei *.deps.json nicht vorhanden ist, wird davon ausgegangen, dass das Verzeichnis der Anwendung alle Abhängigkeiten enthält. Der Inhalt des Verzeichnisses wird verwendet, um die Abfrageeigenschaften zu füllen.

Darüber hinaus werden die *.deps.json-Dateien für alle referenzierten Frameworks ähnlich analysiert.

Die Umgebungsvariable DOTNET_ADDITIONAL_DEPS kann verwendet werden, um zusätzliche Abhängigkeiten hinzuzufügen. dotnet.exe enthält auch einen optionalen --additional-deps Parameter zum Festlegen dieses Werts beim Starten der Anwendung.

Hinweis

Die Umgebungsvariable DOTNET_ADDITIONAL_DEPS und die --additional-deps Befehlszeilenoption gelten nur für frameworkabhängige Anwendungen. Diese Optionen werden für eigenständige Anwendungen ignoriert. Weitere Informationen finden Sie unter Framework-abhängige und eigenständige Bereitstellungen.

Die APP_PATHS Eigenschaft wird nicht standardmäßig aufgefüllt und wird für die meisten Anwendungen weggelassen.

Auf die Liste aller *.deps.json Dateien, die von der Anwendung verwendet werden, kann über System.AppContext.GetData("APP_CONTEXT_DEPS_FILES")zugegriffen werden.

Wie sehe ich die Abfrageeigenschaften im verwalteten Code?

Jede Eigenschaft ist verfügbar, indem sie die AppContext.GetData(String) Funktion mit dem Eigenschaftennamen aus der obigen Tabelle aufruft.

Wie debugge ich die Erstellung der Überprüfungseigenschaften?

Der .NET Core-Laufzeithost gibt nützliche Ablaufverfolgungsmeldungen aus, wenn bestimmte Umgebungsvariablen aktiviert sind:

Umgebungsvariable Description
DOTNET_HOST_TRACE=1 Aktiviert Tracing.
DOTNET_HOST_TRACEFILE=<path> Gibt die Ablaufverfolgung in einem Dateipfad anstelle der Standardausgabe an stderr aus
DOTNET_HOST_TRACE_VERBOSITY Legt die Ausführlichkeit von 1 (niedrigste) auf 4 (höchste) fest.

Weitere Informationen finden Sie unter DOTNET_HOST_TRACE Umgebungsvariablen.

Standardüberprüfung verwalteter Assemblys

Beim Überprüfen einer verwalteten Assembly sucht der AssemblyLoadContext.Default in der folgenden Reihenfolge:

  • Dateien, die mit dem AssemblyName.Name In TRUSTED_PLATFORM_ASSEMBLIES übereinstimmen (nach dem Entfernen von Dateierweiterungen).
  • Assemblydateien in APP_PATHS mit gemeinsamen Dateierweiterungen.

Überprüfungen von Satellitenassemblys (Ressourcen)

Um eine Satellitenassembly für eine bestimmte Kultur zu finden, erstellen Sie eine Reihe von Dateipfaden.

Fügen Sie für jeden Pfad in PLATFORM_RESOURCE_ROOTS und dann APP_PATHSdie CultureInfo.Name Zeichenfolge, ein Verzeichnistrennzeichen, die AssemblyName.Name Zeichenfolge und die Erweiterung '.dll' an.

Wenn eine übereinstimmende Datei vorhanden ist, versuchen Sie, sie zu laden und zurückzugeben.

Überprüfung nicht verwalteter (nativer) Bibliotheken

Der Testalgorithmus der Runtime für nicht verwaltete Bibliotheken ist auf allen Plattformen identisch. Da die tatsächliche Auslastung der nicht verwalteten Bibliothek jedoch von der zugrunde liegenden Plattform ausgeführt wird, kann das beobachtete Verhalten geringfügig abweichen.

  1. Überprüfen Sie, ob der angegebene Bibliotheksname einen absoluten oder relativen Pfad darstellt.

  2. Wenn der Name einen absoluten Pfad darstellt, verwenden Sie den Namen direkt für alle nachfolgenden Vorgänge. Verwenden Sie andernfalls den Namen, und erstellen Sie plattformdefinierte Kombinationen, um dies zu berücksichtigen. Kombinationen bestehen aus plattformspezifischen Präfixen (z. B. lib) und/oder Suffixen (z. B. .dll, .dylib, und .so). Dies ist keine vollständige Liste, und sie stellt nicht den genauen Aufwand dar, der auf jeder Plattform durchgeführt wurde. Es ist nur ein Beispiel dafür, was berücksichtigt wird. Weitere Informationen finden Sie unter Laden der nativen Bibliothek.

  3. Der Name und, wenn der Pfad relativ ist, jede Kombination wird dann in den folgenden Schritten verwendet. Beim ersten erfolgreichen Ladeversuch wird das Handle sofort an die geladene Bibliothek zurückgegeben.

    • Fügen Sie ihn an jeden pfad an, der in der NATIVE_DLL_SEARCH_DIRECTORIES Eigenschaft angegeben ist, und versuchen Sie zu laden.

    • Wenn DefaultDllImportSearchPathsAttribute entweder nicht für die aufrufende Assembly oder p/invoke definiert ist, oder definiert ist und DllImportSearchPath.AssemblyDirectory enthält, fügen Sie den Namen oder die Kombination an das Verzeichnis der aufrufenden Assembly an, und versuchen Sie, zu laden.

    • Verwenden Sie sie direkt, um die Bibliothek zu laden.

  4. Gibt an, dass die Bibliothek nicht geladen werden konnte.