Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Wystąpienie AssemblyLoadContext.Default jest odpowiedzialne za lokalizowanie zależności zestawu. W tym artykule opisano logikę sondowania instancji AssemblyLoadContext.Default.
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 | Description |
|---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
Lista ścieżek plików składowych 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 katalogów do przeszukiwania 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 analizowany w celu wypełnienia właściwości sondowania.
- Jeśli plik *.deps.json nie jest obecny, przyjmuje się, że katalog aplikacji zawiera wszystkie zależności. Zawartość katalogu służy do wypełniania właściwości przeszukiwania.
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.
Uwaga / Notatka
Zmienna DOTNET_ADDITIONAL_DEPS środowiskowa i --additional-deps opcja wiersza polecenia dotyczą tylko aplikacji zależnych od platformy.
Te opcje są ignorowane dla aplikacji samodzielnych.
Aby uzyskać więcej informacji, zobacz Framework-dependent vs self-contained deployments (Wdrożenia zależne od struktury a wdrożenia samodzielne).
Właściwość APP_PATHS nie jest wypełniana domyślnie i jest pomijana dla większości aplikacji.
Dostęp do listy wszystkich plików *.deps.json używanych przez aplikację można uzyskać za pośrednictwem adresu System.AppContext.GetData("APP_CONTEXT_DEPS_FILES").
Jak wyświetlić 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 debugować konstrukcję 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 | Description |
|---|---|
DOTNET_HOST_TRACE=1 |
Włącza śledzenie. |
DOTNET_HOST_TRACEFILE=<path> |
Przekierowuje do ścieżki pliku zamiast domyślnej ścieżki stderr. |
DOTNET_HOST_TRACE_VERBOSITY |
Ustawia szczegółowość z zakresu od 1 (najniższa) do 4 (najwyższa). |
Aby uzyskać więcej informacji, zobacz zmienne środowiskowe DOTNET_HOST_TRACE.
Domyślne sondowanie modułu zarządzanego
Podczas sondowania w celu zlokalizowania zestawu zarządzanego, AssemblyLoadContext.Default przeszukuje w następującej kolejności:
- Pliki pasujące do AssemblyName.Name w
TRUSTED_PLATFORM_ASSEMBLIES(po usunięciu rozszerzeń plików). - Pliki zestawów w programie
APP_PATHSz 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 i następnie APP_PATHS, dołą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 wyszukiwania 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.
Sprawdź, czy podana nazwa biblioteki reprezentuje ścieżkę bezwzględną lub względną.
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.Nazwa oraz, jeśli ścieżka jest względna, każda kombinacja, są następnie używane w dalszych krokach. Pierwsza pomyślna próba załadowania natychmiast zwraca uchwyt do załadowanej biblioteki.
Dołącz ją do każdej ścieżki podanej
NATIVE_DLL_SEARCH_DIRECTORIESwe właściwości i spróbuj załadować.Jeśli DefaultDllImportSearchPathsAttribute nie jest zdefiniowany w zestawie wywołującym lub p/invoke albo 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ę.
Wskaż, że biblioteka nie została załadowana.