Delen via


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_PATHSde 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.

  1. Controleer of de opgegeven bibliotheeknaam een absoluut of relatief pad vertegenwoordigt.

  2. 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, .dyliben .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.

  3. 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.

  4. Geef aan dat de bibliotheek niet kan worden geladen.