Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
A instância AssemblyLoadContext.Default é responsável por localizar as dependências de um assembly. Este artigo descreve a lógica de sondagem da instância AssemblyLoadContext.Default.
Propriedades de investigação configuradas pelo host
Quando o runtime é iniciado, o host de runtime fornece um conjunto de propriedades de investigação nomeadas que configuram caminhos de investigação AssemblyLoadContext.Default.
Cada propriedade de investigação é 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 da propriedade | Description |
|---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
Lista de caminhos de arquivo de assembly para plataforma e aplicativo. |
PLATFORM_RESOURCE_ROOTS |
Lista de caminhos de diretório para procurar assemblies de recursos satélites. |
NATIVE_DLL_SEARCH_DIRECTORIES |
Lista de caminhos de diretório para pesquisar bibliotecas não gerenciadas (nativas). |
APP_PATHS |
Lista de caminhos de diretório para pesquisar assemblies gerenciados. |
Como as propriedades são populadas?
Há dois cenários principais para preencher as propriedades dependendo se o <arquivo myapp>.deps.json existe.
- Quando o arquivo *.deps.json estiver presente, ele será analisado para preencher as propriedades de sondagem.
- Quando o arquivo *.deps.json não estiver presente, o diretório do aplicativo será considerado para conter todas as dependências. O conteúdo do diretório é usado para preencher as propriedades de investigação.
Além disso, os arquivos *.deps.json para quaisquer estruturas referenciadas são analisados da mesma forma.
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.
Observação
A DOTNET_ADDITIONAL_DEPS variável de ambiente e a opção --additional-deps de linha de comando se aplicam somente a aplicativos dependentes da estrutura.
Essas opções são ignoradas para aplicativos auto-suficientes.
Para obter mais informações, consulte implantações dependentes do Framework versus autossuficienciadas.
A APP_PATHS propriedade não é preenchida por padrão e é omitida para a maioria dos aplicativos.
A lista de todos * .deps.json arquivos usados pelo aplicativo pode ser acessada por meio de System.AppContext.GetData("APP_CONTEXT_DEPS_FILES").
Como fazer para ver as propriedades de investigação por meio do código gerenciado?
Cada propriedade está disponível ao chamar a função AppContext.GetData(String) com o nome da propriedade na tabela acima.
Como fazer para depurar a construção das propriedades de investigação?
O host de runtime do .NET Core produzirá mensagens de rastreamento úteis quando determinadas variáveis de ambiente estiverem habilitadas:
| Variável de ambiente | Description |
|---|---|
DOTNET_HOST_TRACE=1 |
Habilita o rastreamento. |
DOTNET_HOST_TRACEFILE=<path> |
Rastreia um caminho de arquivo em vez do padrão stderr. |
DOTNET_HOST_TRACE_VERBOSITY |
Define a verbosidade de 1 (mais baixa) para 4 (mais alta). |
Para obter mais informações, consulte DOTNET_HOST_TRACE variáveis de ambiente.
Investigação padrão do assembly gerenciado
Ao investigar para localizar um assembly gerenciado, a ordem de AssemblyLoadContext.Default é a seguinte:
- Arquivos correspondentes à AssemblyName.Name entrada
TRUSTED_PLATFORM_ASSEMBLIES(depois de remover extensões de arquivo). - Arquivos do assembly em
APP_PATHScom extensões de arquivo comuns.
Investigação de assembly (recurso) satélite
Para encontrar um assembly satélite de uma cultura específica, construa um conjunto de caminhos de arquivo.
Para cada caminho dentro PLATFORM_RESOURCE_ROOTS e depois APP_PATHS, acrescente a CultureInfo.Name cadeia de caracteres, um separador de diretório, a AssemblyName.Name cadeia de caracteres e a extensão '.dll'.
Se houver algum arquivo correspondente, tente carregá-lo e devolvê-lo.
Investigação de biblioteca não gerenciada (nativa)
O algoritmo de investigação de biblioteca não gerenciada do runtime é 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 consideração. As combinações consistem em prefixos específicos da plataforma (por exemplo,
lib) e/ou sufixos (por exemplo,.dll,.dylibe.so). Essa não é uma lista completa e não representa o esforço exato feito em cada plataforma. É apenas um exemplo do que é considerado. Para obter mais informações, consulte o carregamento da biblioteca nativa.O nome (e, se o caminho for relativo, cada combinação) será usado nas etapas a seguir. A primeira tentativa bem-sucedida de carregamento retorna imediatamente o identificador da biblioteca carregada.
Acrescente-o a cada caminho fornecido pela propriedade
NATIVE_DLL_SEARCH_DIRECTORIESe 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 de chamada e tente carregar.Use-o diretamente para carregar a biblioteca.
Indique que a biblioteca falhou ao carregar.