Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
L'istanza AssemblyLoadContext.Default è responsabile per individuare le dipendenze di un componente di assembly. Questo articolo descrive la logica di analisi dell'istanza AssemblyLoadContext.Default.
Host configurato per le proprietà di sondaggio
Quando il runtime viene avviato, l'host di runtime fornisce un set di proprietà di probe nominate che configurano i percorsi del probe AssemblyLoadContext.Default.
Ogni proprietà della sonda è facoltativa. Se presente, ogni proprietà è un valore stringa che contiene un elenco delimitato di percorsi assoluti. Il delimitatore è ';' in Windows e ':' in tutte le altre piattaforme.
Nome della proprietà | Descrizione |
---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
Elenco dei percorsi dei file di assembly della piattaforma e dell'applicazione. |
PLATFORM_RESOURCE_ROOTS |
Elenco dei percorsi di directory in cui cercare gli assembly di risorse satellite. |
NATIVE_DLL_SEARCH_DIRECTORIES |
Elenco dei percorsi di directory in cui cercare librerie non gestite (native). |
APP_PATHS |
Elenco dei percorsi di directory in cui cercare gli assembly gestiti. |
Come vengono popolate le proprietà?
Esistono due scenari principali per popolare le proprietà a seconda che il <file myapp>.deps.json esista.
- Quando il file *.deps.json è presente, viene analizzato per riempire le proprietà di sondaggio.
- Quando il file *.deps.json non è presente, si presuppone che la directory dell'applicazione contenga tutte le dipendenze. Il contenuto della directory viene utilizzato per riempire le proprietà di rilevamento.
Inoltre, i file *.deps.json per qualsiasi framework a cui si fa riferimento vengono analizzati in modo analogo.
La variabile DOTNET_ADDITIONAL_DEPS
di ambiente può essere usata per aggiungere altre dipendenze.
dotnet.exe
contiene anche un parametro facoltativo --additional-deps
per impostare questo valore all'avvio dell'applicazione.
La APP_PATHS
proprietà non viene popolata per impostazione predefinita e viene omessa per la maggior parte delle applicazioni.
È possibile accedere all'elenco di tutti i file *.deps.json usati dall'applicazione tramite System.AppContext.GetData("APP_CONTEXT_DEPS_FILES")
.
Come è possibile visualizzare le proprietà di probe dal codice gestito?
Ogni proprietà è disponibile chiamando la AppContext.GetData(String) funzione con il nome della proprietà della tabella precedente.
Come posso eseguire il debug della costruzione delle proprietà della sonda?
L'host di runtime .NET Core restituirà messaggi di traccia utili quando alcune variabili di ambiente sono abilitate:
Variabile di ambiente | Descrizione |
---|---|
COREHOST_TRACE=1 |
Abilita il tracciamento. |
COREHOST_TRACEFILE=<path> |
Traccia a un percorso del file invece del predefinito stderr . |
COREHOST_TRACE_VERBOSITY |
Imposta il livello di dettaglio da 1 (più basso) a 4 (massimo). |
Indagine predefinita dell'assembly gestito
Quando si cerca di localizzare un assembly gestito, l'oggetto controlla nell'ordine seguente: AssemblyLoadContext.Default
- File corrispondenti a AssemblyName.Name in
TRUSTED_PLATFORM_ASSEMBLIES
(dopo la rimozione delle estensioni di file). - File di assemblaggio in
APP_PATHS
con estensioni di file comuni.
Sondaggio di assemblaggio del satellite (risorsa)
Per trovare un assembly satellite per una cultura specifica, creare un insieme di percorsi di file.
Per ogni percorso in PLATFORM_RESOURCE_ROOTS
e quindi APP_PATHS
aggiungere la CultureInfo.Name stringa, un separatore di directory, la AssemblyName.Name stringa e l'estensione '.dll'.
Se esiste un file corrispondente, tentare di caricarlo e restituirlo.
Probe della libreria non gestita (nativa)
L'algoritmo di probe della libreria non gestita del runtime è identico in tutte le piattaforme. Tuttavia, poiché il carico effettivo della libreria non gestita viene eseguito dalla piattaforma sottostante, il comportamento osservato può essere leggermente diverso.
Controllare se il nome della libreria fornito rappresenta un percorso assoluto o relativo.
Se il nome rappresenta un percorso assoluto, usare direttamente il nome per tutte le operazioni successive. In caso contrario, utilizzare il nome e creare le combinazioni definite dalla piattaforma da prendere in considerazione. Le combinazioni sono costituite da prefissi specifici della piattaforma (ad esempio,
lib
) e/o suffissi (ad esempio,.dll
,.dylib
e.so
). Questo non è un elenco completo e non rappresenta l'esatto sforzo fatto su ogni piattaforma. È solo un esempio di ciò che viene considerato. Per altre informazioni, vedere Caricamento della libreria nativa.Il nome e ogni combinazione, se il percorso è relativo, vengono quindi utilizzati nei passaggi seguenti. Il primo tentativo di caricamento riuscito restituisce immediatamente l'handle alla libreria caricata.
Aggiungerlo a ogni percorso fornito nella proprietà
NATIVE_DLL_SEARCH_DIRECTORIES
e tentare di caricare.Se DefaultDllImportSearchPathsAttribute non è definito nell'assembly chiamante, né come P/Invoke, oppure se è definito e include
DllImportSearchPath.AssemblyDirectory
, aggiungi il nome o la combinazione alla directory dell'assembly chiamante e tenta di caricarlo.Usarlo direttamente per caricare la libreria.
Indica che il caricamento della libreria non è riuscito.