Sondagem padrão
A AssemblyLoadContext.Default instância é responsável por localizar as dependências de um assembly. Este artigo descreve a lógica de sondagem da AssemblyLoadContext.Default instância.
Propriedades de sondagem configuradas pelo host
Quando o tempo de execução é iniciado, o host de tempo de execução fornece um conjunto de propriedades de sondagem nomeadas que configuram AssemblyLoadContext.Default caminhos de teste.
Cada propriedade de sondagem é opcional. Se presente, cada propriedade é um valor de cadeia de caracteres que contém uma lista delimitada de caminhos absolutos. O delimitador é ';' no Windows e ':' em todas as outras plataformas.
Nome de Propriedade | Description |
---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
Lista de caminhos de arquivos de assembly de plataforma e aplicativo. |
PLATFORM_RESOURCE_ROOTS |
Lista de caminhos de diretório para procurar assemblies de recursos satélite. |
NATIVE_DLL_SEARCH_DIRECTORIES |
Lista de caminhos de diretório para procurar bibliotecas não gerenciadas (nativas). |
APP_PATHS |
Lista de caminhos de diretório para procurar assemblies gerenciados. |
Como são preenchidas as propriedades?
Há dois cenários principais para preencher as propriedades, dependendo se o <arquivo myapp>.deps.json existe.
- Quando o arquivo *.deps.json está presente, ele é analisado para preencher as propriedades de sondagem.
- Quando o arquivo *.deps.json não está presente, presume-se que o diretório do aplicativo contenha todas as dependências. O conteúdo do diretório é usado para preencher as propriedades de sondagem.
Além disso, os arquivos *.deps.json para quaisquer estruturas referenciadas são analisados de forma semelhante.
A variável DOTNET_ADDITIONAL_DEPS
de ambiente pode ser usada para adicionar dependências adicionais. dotnet.exe
também contém um parâmetro opcional --additional-deps
para definir esse valor na inicialização do aplicativo.
A APP_PATHS
propriedade não é preenchida por padrão e é omitida para a maioria dos aplicativos.
A lista de todos os arquivos *.deps.json usados pelo aplicativo pode ser acessada via System.AppContext.GetData("APP_CONTEXT_DEPS_FILES")
.
Como posso ver as propriedades de sondagem do código gerenciado?
Cada propriedade está disponível chamando a AppContext.GetData(String) função com o nome da propriedade da tabela acima.
Como depurar a construção das propriedades de sondagem?
O host de tempo de execução do .NET Core produzirá mensagens de rastreamento úteis quando determinadas variáveis de ambiente estiverem habilitadas:
Variável de Ambiente | Description |
---|---|
COREHOST_TRACE=1 |
Permite o rastreamento. |
COREHOST_TRACEFILE=<path> |
Rastreia um caminho de arquivo em vez do padrão stderr . |
COREHOST_TRACE_VERBOSITY |
Define a verbosidade de 1 (mais baixa) a 4 (mais alta). |
Teste padrão de montagem gerenciada
Ao sondar para localizar um assembly gerenciado, as AssemblyLoadContext.Default aparências em ordem em:
- Arquivos correspondentes ao in
TRUSTED_PLATFORM_ASSEMBLIES
(depois de remover as AssemblyName.Name extensões de arquivo). - Assembly com extensões
APP_PATHS
de arquivo comuns.
Sondagem de montagem por satélite (recurso)
Para encontrar um assembly satélite para uma cultura específica, construa um conjunto de caminhos de arquivo.
Para cada caminho em e, em PLATFORM_RESOURCE_ROOTS
seguida APP_PATHS
, anexe a CultureInfo.Name cadeia de caracteres, um separador de diretório, a AssemblyName.Name cadeia de caracteres e a extensão '.dll'.
Se existir algum ficheiro correspondente, tente carregá-lo e devolvê-lo.
Sondagem de biblioteca não gerenciada (nativa)
O algoritmo de sondagem de biblioteca não gerenciada do tempo de execução é idêntico em todas as plataformas. No entanto, como a carga real da biblioteca não gerenciada é executada pela plataforma subjacente, o comportamento observado pode ser ligeiramente diferente.
Verifique se o nome da biblioteca fornecida representa um caminho absoluto ou relativo.
Se o nome representar um caminho absoluto, use o nome diretamente para todas as operações subsequentes. Caso contrário, use o nome e crie combinações definidas pela plataforma para considerar. As combinações consistem em prefixos específicos da plataforma (por exemplo,
lib
) e/ou sufixos (por exemplo,.dll
,.dylib
, e.so
). Esta não é uma lista exaustiva e não representa o esforço exato feito em cada plataforma. É apenas um exemplo do que é considerado. Para obter mais informações, consulte Carregamento de biblioteca nativa.O nome e, se o caminho for relativo, cada combinação, é usado nas etapas a seguir. A primeira tentativa de carregamento bem-sucedida retorna imediatamente o identificador para a biblioteca carregada.
Anexe-o a cada caminho fornecido na
NATIVE_DLL_SEARCH_DIRECTORIES
propriedade e tente carregar.Se DefaultDllImportSearchPathsAttribute não estiver definido no assembly de chamada ou p/invoke ou estiver definido e incluir
DllImportSearchPath.AssemblyDirectory
, acrescente o nome ou a combinação ao diretório do assembly chamador e tente carregar.Use-o diretamente para carregar a biblioteca.
Indique que a biblioteca falhou ao carregar.