Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Het AssemblyLoadContext.Default exemplaar is verantwoordelijk voor het vinden van de afhankelijkheden van een assembly. In dit artikel wordt de testlogica van het AssemblyLoadContext.Default exemplaar beschreven.
Door de host geconfigureerde eigenschappen voor testen
Wanneer de runtime wordt gestart, biedt de runtime-host een set benoemde detectie-eigenschappen waarmee detectiepaden worden geconfigureerd AssemblyLoadContext.Default.
Elke onderzoeks-eigenschap is optioneel. Indien aanwezig, is elke eigenschap een tekenreeks die een gescheiden lijst met absolute paden bevat. Het scheidingsteken is ';' in Windows en ':' op alle andere platforms.
Naam van propertie | Beschrijving |
---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
Lijst met platform- en toepassingsassemblybestandspaden. |
PLATFORM_RESOURCE_ROOTS |
Lijst van directorypaden voor het zoeken naar satellietresource-assembly's. |
NATIVE_DLL_SEARCH_DIRECTORIES |
Lijst met mappaden om te zoeken naar niet-beheerde (systeemeigen) bibliotheken. |
APP_PATHS |
Lijst met mappaden voor het zoeken naar beheerde assembly's. |
Hoe worden de eigenschappen gevuld?
Er zijn twee hoofdscenario's voor het invullen van de eigenschappen, afhankelijk van of het <bestand myapp>.deps.json bestaat.
- Wanneer het bestand *.deps.json aanwezig is, wordt het geanalyseerd om de proberingskenmerken in te vullen.
- Wanneer het bestand *.deps.json niet aanwezig is, wordt ervan uitgegaan dat de map van de toepassing alle afhankelijkheden bevat. De inhoud van de map wordt gebruikt om de detectie-eigenschappen in te vullen.
Daarnaast worden de *.deps.json bestanden voor eventuele frameworks waarnaar wordt verwezen, op dezelfde manier geparseerd.
De omgevingsvariabele DOTNET_ADDITIONAL_DEPS
kan worden gebruikt om extra afhankelijkheden toe te voegen.
dotnet.exe
bevat ook een optionele --additional-deps
parameter om deze waarde in te stellen bij het opstarten van de toepassing.
De APP_PATHS
eigenschap wordt niet standaard ingevuld en wordt weggelaten voor de meeste toepassingen.
De lijst met alle *.deps.json bestanden die door de toepassing worden gebruikt, kunnen worden geopend via System.AppContext.GetData("APP_CONTEXT_DEPS_FILES")
.
Hoe bekijk ik de verkenningseigenschappen van beheerde code?
Elke eigenschap is beschikbaar door de AppContext.GetData(String) functie aan te roepen met de naam van de eigenschap uit de bovenstaande tabel.
Hoe debug ik de constructie van de sonderende eigenschappen?
De .NET Core Runtime-host voert nuttige traceringsberichten uit wanneer bepaalde omgevingsvariabelen zijn ingeschakeld:
Omgevingsvariabele | Beschrijving |
---|---|
COREHOST_TRACE=1 |
Schakelt de traceerfunctie in. |
COREHOST_TRACEFILE=<path> |
Verwijst naar een pad naar een bestand in plaats van de standaard stderr . |
COREHOST_TRACE_VERBOSITY |
Hiermee stelt u de uitgebreidheid van 1 (laagste) in op 4 (hoogste). |
Standaardonderzoek van beheerde assembly
Wanneer er gezocht wordt naar een beheerde assembly, controleert het AssemblyLoadContext.Default de volgende volgorde:
- Bestanden die overeenkomen met de AssemblyName.Name in
TRUSTED_PLATFORM_ASSEMBLIES
(na het verwijderen van bestandsextensies). - Assemblybestanden in
APP_PATHS
met algemene bestandsextensies.
Satelliet (bron) assemblageonderzoek
Als u een satellietassembly voor een specifieke cultuur wilt vinden, maakt u een set bestandspaden.
Voeg voor elk pad in PLATFORM_RESOURCE_ROOTS
, en vervolgens APP_PATHS
, de CultureInfo.Name-tekenreeks, een mapscheidingsteken, de AssemblyName.Name-tekenreeks, en de extensie '.dll' toe.
Als er een overeenkomend bestand bestaat, probeert u het te laden en te retourneren.
Onbeheerde (natuurlijke) bibliotheekonderzoek
Het onbeheerde bibliotheek-probingalgoritme van de runtime is identiek op alle platforms. Omdat de werkelijke belasting van de onbeheerde bibliotheek echter wordt uitgevoerd door het onderliggende platform, kan het waargenomen gedrag enigszins afwijken.
Controleer of de opgegeven bibliotheeknaam een absoluut of relatief pad vertegenwoordigt.
Als de naam een absoluut pad vertegenwoordigt, gebruikt u de naam rechtstreeks voor alle volgende bewerkingen. Gebruik anders de naam en maak platformgedefinieerde combinaties om te overwegen. Combinaties bestaan uit platformspecifieke voorvoegsels (bijvoorbeeld
lib
) en/of achtervoegsels (bijvoorbeeld.dll
,.dylib
en.so
). Dit is geen volledige lijst en vertegenwoordigt niet de exacte inspanningen die op elk platform zijn gedaan. Het is slechts een voorbeeld van wat wordt overwogen. Zie systeemeigen bibliotheek laden voor meer informatie.De naam en, als het pad relatief is, wordt elke combinatie gebruikt in de volgende stappen. De eerste geslaagde laadpoging geeft onmiddellijk het handvat naar de geladen bibliotheek terug.
Voeg het toe aan elk pad dat is opgegeven in de
NATIVE_DLL_SEARCH_DIRECTORIES
eigenschap en probeer te laden.Als DefaultDllImportSearchPathsAttribute niet is gedefinieerd in de aanroepende assembly of bij p/invoke, of als DefaultDllImportSearchPathsAttribute wel is gedefinieerd en bevat, voeg dan de naam of combinatie toe aan de directory van de aanroepende assembly en probeer te laden.
Gebruik deze rechtstreeks om de bibliotheek te laden.
Geef aan dat de bibliotheek niet kan worden geladen.