Standaardprompting
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 testeigenschappen waarmee testpaden worden geconfigureerd AssemblyLoadContext.Default .
Elke testeigenschap is optioneel. Indien aanwezig, is elke eigenschap een tekenreekswaarde die een lijst met absolute paden bevat met scheidingstekens. Het scheidingsteken is ';' in Windows en ':' op alle andere platforms.
Eigenschapsnaam | Beschrijving |
---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
Lijst met platform- en toepassingsassemblybestandspaden. |
PLATFORM_RESOURCE_ROOTS |
Lijst met directorypaden om te zoeken naar assembly's voor satellietresources. |
NATIVE_DLL_SEARCH_DIRECTORIES |
Lijst met mappaden om te zoeken naar niet-beheerde (systeemeigen) bibliotheken. |
APP_PATHS |
Lijst met mappaden om te zoeken naar beheerde assembly's. |
Hoe worden de eigenschappen ingevuld?
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 geparseerd om de testeigenschappen te vullen.
- Wanneer het *.deps.json bestand niet aanwezig is, wordt ervan uitgegaan dat de map van de toepassing alle afhankelijkheden bevat. De inhoud van de map wordt gebruikt om de testeigenschappen 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, zijn toegankelijk via System.AppContext.GetData("APP_CONTEXT_DEPS_FILES")
.
Hoe kan ik de testeigenschappen van beheerde code bekijken?
Elke eigenschap is beschikbaar door de AppContext.GetData(String) functie aan te roepen met de naam van de eigenschap uit de bovenstaande tabel.
Hoe kan ik fouten opsporen in de bouw van de testeigenschappen?
De .NET Core Runtime-host voert nuttige traceringsberichten uit wanneer bepaalde omgevingsvariabelen zijn ingeschakeld:
Omgevingsvariabele | Beschrijving |
---|---|
COREHOST_TRACE=1 |
Hiermee schakelt u tracering in. |
COREHOST_TRACEFILE=<path> |
Traceringen naar een bestandspad in plaats van de standaardwaarde stderr . |
COREHOST_TRACE_VERBOSITY |
Hiermee stelt u de uitgebreidheid van 1 (laagste) in op 4 (hoogste). |
Standaardprompt van beheerde assembly
Wanneer u wilt zoeken naar een beheerde assembly, ziet u het AssemblyLoadContext.Default volgende:
- Bestanden die overeenkomen met de AssemblyName.Name in
TRUSTED_PLATFORM_ASSEMBLIES
(na het verwijderen van bestandsextensies). - Assemblybestanden
APP_PATHS
met algemene bestandsextensies.
Satelliet (resource) assemblyprobing
Als u een satellietassembly voor een specifieke cultuur wilt vinden, maakt u een set bestandspaden.
Voeg voor elk pad in PLATFORM_RESOURCE_ROOTS
en voeg 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 (systeemeigen) bibliotheekprobing
Het onbeheerde bibliotheekprogoritme 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. 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 retourneert onmiddellijk de ingang naar de geladen bibliotheek.
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 voor de aanroepende assembly of p/invoke of is gedefinieerd en bevat
DllImportSearchPath.AssemblyDirectory
, voegt u de naam of combinatie toe aan de directory van de aanroepende assembly en probeert u te laden.Gebruik deze rechtstreeks om de bibliotheek te laden.
Geef aan dat de bibliotheek niet kan worden geladen.