Udostępnij za pośrednictwem


Domyślne sondowanie

Wystąpienie AssemblyLoadContext.Default jest odpowiedzialne za lokalizowanie zależności zestawu. W tym artykule opisano logikę AssemblyLoadContext.Default sondowania wystąpienia.

Właściwości sondowania skonfigurowane przez hosta

Po uruchomieniu środowiska uruchomieniowego host środowiska uruchomieniowego udostępnia zestaw nazwanych właściwości sondowania, które konfigurują AssemblyLoadContext.Default ścieżki sondowania.

Każda właściwość sondowania jest opcjonalna. Jeśli istnieje, każda właściwość jest wartością ciągu zawierającą rozdzielaną listę ścieżek bezwzględnych. Ogranicznik to ";" w systemach Windows i ":" na wszystkich innych platformach.

Nazwa właściwości Opis
TRUSTED_PLATFORM_ASSEMBLIES Lista ścieżek plików zestawu platformy i aplikacji.
PLATFORM_RESOURCE_ROOTS Lista ścieżek katalogu do wyszukiwania zestawów zasobów satelitarnych.
NATIVE_DLL_SEARCH_DIRECTORIES Lista ścieżek katalogu do wyszukiwania niezarządzanych (natywnych) bibliotek.
APP_PATHS Lista ścieżek katalogu do wyszukiwania zarządzanych zestawów.

Jak są wypełniane właściwości?

Istnieją dwa główne scenariusze wypełniania właściwości w zależności od tego, czy <plik myapp>.deps.json istnieje.

  • Gdy plik *.deps.json jest obecny, jest on analizowany w celu wypełnienia właściwości sondowania.
  • Jeśli plik *.deps.json nie jest obecny, zakłada się, że katalog aplikacji zawiera wszystkie zależności. Zawartość katalogu służy do wypełniania właściwości sondowania.

Ponadto pliki *.deps.json dla wszystkich odwołanych struktur są podobnie analizowane.

Zmienna środowiskowa DOTNET_ADDITIONAL_DEPS może służyć do dodawania dodatkowych zależności. dotnet.exe Zawiera również opcjonalny --additional-deps parametr ustawiania tej wartości podczas uruchamiania aplikacji.

Właściwość APP_PATHS nie jest wypełniana domyślnie i jest pomijana dla większości aplikacji.

Lista wszystkich plików *.deps.json używanych przez aplikację może być dostępna za pośrednictwem adresu System.AppContext.GetData("APP_CONTEXT_DEPS_FILES").

Jak mogę zobaczyć właściwości sondowania z kodu zarządzanego?

Każda właściwość jest dostępna przez wywołanie AppContext.GetData(String) funkcji z nazwą właściwości z powyższej tabeli.

Jak mogę debugować budowę właściwości sondowania?

Host środowiska uruchomieniowego platformy .NET Core wyświetli przydatne komunikaty śledzenia po włączeniu określonych zmiennych środowiskowych:

Zmienna środowiskowa opis
COREHOST_TRACE=1 Włącza śledzenie.
COREHOST_TRACEFILE=<path> Śledzi ścieżkę pliku zamiast domyślnego stderr.
COREHOST_TRACE_VERBOSITY Ustawia szczegółowość z zakresu od 1 (najniższa) do 4 (najwyższa).

Domyślne sondowanie zestawu zarządzanego

Podczas sondowania w celu zlokalizowania zestawu zarządzanego wygląd wygląda AssemblyLoadContext.Default w następującej kolejności:

  • Pliki pasujące do pliku (TRUSTED_PLATFORM_ASSEMBLIESpo usunięciu AssemblyName.Name rozszerzeń plików).
  • Pliki zestawów w programie APP_PATHS z typowymi rozszerzeniami plików.

Sondowanie zestawu satelitarnego (zasobu)

Aby znaleźć zestaw satelitarny dla określonej kultury, skonstruuj zestaw ścieżek plików.

Dla każdej ścieżki w PLATFORM_RESOURCE_ROOTS , a następnie APP_PATHSdołącz CultureInfo.Name ciąg, separator katalogu, AssemblyName.Name ciąg i rozszerzenie ".dll".

Jeśli istnieje dowolny pasujący plik, spróbuj załadować i zwrócić go.

Sondowanie niezarządzanej biblioteki (natywnej)

Niezarządzany algorytm sondowania biblioteki środowiska uruchomieniowego jest identyczny na wszystkich platformach. Jednak ponieważ rzeczywiste obciążenie niezarządzanej biblioteki jest wykonywane przez podstawową platformę, zaobserwowane zachowanie może być nieco inne.

  1. Sprawdź, czy podana nazwa biblioteki reprezentuje ścieżkę bezwzględną lub względną.

  2. Jeśli nazwa reprezentuje ścieżkę bezwzględną, użyj nazwy bezpośrednio dla wszystkich kolejnych operacji. W przeciwnym razie użyj nazwy i utwórz kombinacje zdefiniowane przez platformę, aby wziąć pod uwagę. Kombinacje składają się z prefiksów specyficznych dla platformy (na przykład lib) i/lub sufiksów (na przykład .dll, , .dylibi .so). Nie jest to wyczerpująca lista i nie reprezentuje dokładnych wysiłków dokonanych na każdej platformie. Jest to tylko przykład tego, co jest brane pod uwagę. Aby uzyskać więcej informacji, zobacz ładowanie biblioteki natywnej.

  3. Nazwa i, jeśli ścieżka jest względna, każda kombinacja jest używana w poniższych krokach. Pierwsza pomyślna próba załadowania natychmiast zwraca uchwyt do załadowanego biblioteki.

    • Dołącz ją do każdej ścieżki podanej NATIVE_DLL_SEARCH_DIRECTORIES we właściwości i spróbuj załadować.

    • Jeśli DefaultDllImportSearchPathsAttribute nie zdefiniowano zestawu wywołującego lub p/invoke lub jest zdefiniowany i zawiera DllImportSearchPath.AssemblyDirectory, dołącz nazwę lub kombinację do katalogu zestawu wywołującego i spróbuj załadować.

    • Użyj go bezpośrednio, aby załadować bibliotekę.

  4. Wskazuje, że nie można załadować biblioteki.