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.
Este artigo apresenta conceitos importantes relacionados a pacotes de estrutura MSIX. As informações neste artigo fornecem um contexto útil para ajudá-lo a entender melhor o design e a finalidade do recurso de dependências dinâmicas no SDK de Aplicativos do Windows e no sistema operacional Windows 11. Esse recurso permite que seus aplicativos façam referência e usem pacotes da estrutura MSIX em tempo de execução.
Pacotes de framework e o grafo de pacotes
MSIX é um formato de pacote que fornece uma experiência moderna de empacotamento e implantação. Ele também fornece uma maneira limpa e confiável de empacotar bibliotecas redistribuíveis, conteúdo e componentes por meio de pacotes de estrutura MSIX. Um pacote de estrutura MSIX permite que aplicativos empacotados acessem componentes por meio de uma única fonte compartilhada no dispositivo do usuário, em vez de agrupar-os no pacote do aplicativo. Os pacotes de estrutura comuns incluem o do SDK do Aplicativo Windows (incluindo WinUI3), WinUI2, VCLibse o Runtime do DirectX.
Começando no Windows 8 e continuando por meio do Windows 10 e windows 11, cada processo tem um grafo de pacote que fornece a lista de todos os pacotes disponíveis para o aplicativo, incluindo estrutura, recurso, pacotes opcionais e principais. Esse grafo permite que o aplicativo carregue DLLs, conteúdo e declarações de classe em tempo de execução fornecidas por um pacote referenciado. Historicamente, esse grafo foi corrigido no momento da criação do processo e não havia como alterá-lo em tempo de execução:
- Para aplicativos empacotados, o grafo foi inicializado com base nas dependências do pacote declaradas no elemento PackageDependency no manifesto do pacote do aplicativo. Ao criar um aplicativo empacotado, isso normalmente era feito para você durante o processo de compilação com base nas suas referências e dependências do projeto.
- Para aplicativos não empacotados, o grafo do pacote estava vazio e não podia ser alterado. Portanto, os aplicativos não empacotados eram limitados à ordem de pesquisa padrão de DLL conforme e não podiam acessar pacotes de estrutura.
Essa restrição de pacotes estáticos é removida com a introdução do suporte a dependências dinâmicas tanto no SDK de Aplicativos do Windows (e), quanto no Windows 11. Os desenvolvedores podem usar dependências dinâmicas para fazer referência e usar pacotes de framework MSIX em aplicativos durante a execução. As dependências dinâmicas removem a restrição de grafo de pacote estático dos aplicativos, e os desenvolvedores podem decidir como desejam aproveitar os pacotes de framework.
Cenários primários para dependências dinâmicas
Embora as dependências dinâmicas permitam que qualquer aplicativo adicione uma dependência de estrutura de pacotes em tempo de execução, esse recurso destina-se principalmente a ser usado por aplicativos empacotados com localização externa ou aplicativos não empacotados. Os aplicativos empacotados podem continuar a adicionar dependências estáticas por meio do elemento PackageDependency no manifesto do pacote.
- A maioria dos desenvolvedores usará dependências dinâmicas apenas para referenciar o pacote de framework do Windows App SDK em um aplicativo empacotado com local externo ou não empacotado, para que o aplicativo possa chamar APIs fornecidas pelo runtime do Windows App SDK. Para obter mais informações sobre esse cenário, consulte Usar o runtime do SDK do Aplicativo Windows para aplicativos empacotados com local externo ou aplicativos não empacotados.
- Em alguns casos, os desenvolvedores podem querer usar dependências dinâmicas para fazer referência a um pacote de estrutura diferente (diferente do pacote da estrutura do SDK do Aplicativo windows) de um aplicativo não empacotado, como o pacote de estrutura para WinUI2 ou o Runtime do DirectX. Para obter mais informações sobre esse cenário, consulte Usar a API de dependência dinâmica para referenciar pacotes MSIX em tempo de execução.
Modelo de manutenção para pacotes de estrutura
O recurso de dependências dinâmicas preserva a integridade do pipeline de manutenção para o pacote de framework que está sendo referenciado e usado dinamicamente durante a execução.
Os pacotes da estrutura MSIX são compatíveis com a manutenção em um modelo lado a lado, o que significa que cada versão é instalada em sua própria pasta separada e versionada. Isso permite que os aplicativos em uso possam permanecer ativos e em execução mesmo quando um aplicativo mais recente instala uma versão mais recente do pacote da estrutura. O sistema operacional tem lógica de desinstalação para excluir versões mais antigas de um determinado pacote de framework, com base na presença de referências no momento da instalação e referências em tempo de execução para o pacote.
- Quando um aplicativo é instalado, ele pode criar uma referência de tempo de instalação para um pacote de estrutura. Essa referência informa ao sistema operacional que o aplicativo tem uma dependência sobre o pacote de estrutura especificado para que o sistema operacional não desinstale o pacote da estrutura enquanto seu aplicativo estiver instalado.
- Quando um aplicativo precisa usar APIs ou conteúdo em um pacote de estrutura, ele pode adicionar uma referência em tempo de execução ao pacote de estrutura. Essa referência informa ao sistema operacional que o pacote de framework está em uso ativo e para lidar com as atualizações de versão de maneira paralela. Se uma nova versão do pacote da estrutura estiver instalada, mas um aplicativo em execução tiver uma versão mais antiga em uso, o sistema operacional não poderá remover a versão mais antiga até que todas as referências em tempo de execução à versão mais antiga sejam removidas.
Por exemplo, considerando este cenário:
- App A está em execução e usando a versão 1.0.0.0 de um determinado pacote de framework.
- O aplicativo B está instalado e depende da versão 1.0.0.1 do mesmo pacote de framework.
Nesse cenário, ambas as versões do pacote framework serão instaladas e em uso por App A e App B. No entanto, quando App A for fechado pelo usuário e reiniciado, ele passará a usar a versão mais recente 1.0.0.1 do pacote framework. Neste ponto, o requisito de referência em tempo de execução não é mais válido para a versão 1.0.0.0 do pacote de estrutura e o sistema operacional pode remover com segurança a versão 1.0.0.0. Posteriormente, quando aplicativo A e aplicativo B são desinstalados pelo usuário, o requisito de referência no momento da instalação não é mais válido, e é seguro para o sistema operacional remover totalmente o pacote de estrutura.
Para aplicativos empacotados que usam o elemento PackageDependency para especificar referências estáticas a pacotes de framework, as referências aos pacotes de framework durante a instalação são controladas pelo sistema operacional quando o aplicativo é instalado ou desinstalado. Para referências em tempo de execução que são gerenciadas usando o recurso de dependências dinâmicas, o sistema operacional sabe quando um aplicativo empacotado está em execução e evitará remover seus pacotes de estrutura em uso quando um mais recente estiver disponível.
Tópicos relacionados
- Use o tempo de execução do SDK do aplicativo Windows para aplicativos empacotados com localização externa ou desempacotados
- Usar a API de dependência dinâmica para referenciar pacotes MSIX em tempo de execução
- Guia de implantação do SDK de Aplicativos do Windows para aplicativos dependentes de estrutura, empacotados com local externo ou desempacotados
- arquitetura do Runtime para o Windows App SDK
- Tutorial: Usar a API bootstrapper em um aplicativo empacotado com localização externa ou desempacotado usando o Windows App SDK
Windows developer