Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
A instância AssemblyLoadContext.Default é 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 runtime é iniciado, o host de execução fornece um conjunto de propriedades de sondagem nomeadas que configuram AssemblyLoadContext.Default caminhos de sondagem.
Cada característica 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 da propriedade | Description |
|---|---|
TRUSTED_PLATFORM_ASSEMBLIES |
Lista de caminhos de ficheiros de montagem de plataforma e aplicação. |
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 contém 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.
Observação
A DOTNET_ADDITIONAL_DEPS variável de ambiente e a --additional-deps opção de linha de comandos aplicam-se apenas a aplicações dependentes do framework.
Estas opções são ignoradas para aplicações autónomas.
Para mais informações, veja Implementações dependentes do Framework vs autónomas.
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 ao chamar a função AppContext.GetData(String) 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 |
|---|---|
DOTNET_HOST_TRACE=1 |
Permite o rastreamento. |
DOTNET_HOST_TRACEFILE=<path> |
Traça um caminho de ficheiro em vez do padrão stderr. |
DOTNET_HOST_TRACE_VERBOSITY |
Define a verbosidade de 1 (mais baixa) a 4 (mais alta). |
Para obter mais informações, consulte DOTNET_HOST_TRACE variáveis de ambiente.
Teste padrão de montagem gerenciada
Ao sondar para localizar um assemblage gerido, o AssemblyLoadContext.Default procura na seguinte ordem:
- Ficheiros que correspondem ao AssemblyName.Name em
TRUSTED_PLATFORM_ASSEMBLIES(após remover as extensões de ficheiro). - Ficheiros de assembly em
APP_PATHScom extensões de arquivo comuns.
Sondagem de montagem por satélite (recurso)
Para encontrar uma montagem satélite para uma cultura específica, construa um conjunto de diretórios de ficheiros.
Para cada caminho em PLATFORM_RESOURCE_ROOTS e depois em APP_PATHS, acrescente a cadeia de caracteres CultureInfo.Name, um separador de diretório, a cadeia de caracteres AssemblyName.Name 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 da biblioteca não gerenciada da máquina 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, são usados nas etapas seguintes. 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_DIRECTORIESpropriedade e tente carregar.Step 2: Se DefaultDllImportSearchPathsAttribute não estiver definido no assembly de chamada ou no mecanismo p/invoke, ou se estiver definido e incluir
DllImportSearchPath.AssemblyDirectory, adicione o nome ou a combinação ao diretório do assembly chamador e tente carregá-lo.Use-o diretamente para carregar a biblioteca.
Indique que a biblioteca falhou ao carregar.