Partilhar via


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.

  1. Verifique se o nome da biblioteca fornecida representa um caminho absoluto ou relativo.

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

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

  4. Indique que a biblioteca falhou ao carregar.