Delen via


Standaardonderzoek

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.

  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 om te overwegen. 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 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.

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