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 forma 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 SDK do Aplicativo Windows (incluindo WinUI 3), WinUI 2, VCLibs e o DirectX Runtime.
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 build com base nas 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 de DLL padrão 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 de aplicativos, e os desenvolvedores podem decidir como querem aproveitar os pacotes de estrutura.
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 estrutura do SDK do Aplicativo Windows em um aplicativo empacotado com localização externa ou não empacotado para que o aplicativo possa chamar as APIs fornecidas pelo runtime do SDK do Aplicativo Windows. Para obter mais informações sobre esse cenário, consulte Usar o runtime do SDK do Aplicativo Windows para aplicativos empacotados com localização externa ou não empacotado.
- 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 de estrutura SDK do Aplicativo Windows) de um aplicativo não empacotado, como o pacote de estrutura para WinUI 2 ou o DirectX Runtime. 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 estrutura que está sendo referenciado e usado dinamicamente em tempo de execução.
Os pacotes de estrutura MSIX dão suporte para manutenção em um modelo lado a lado, o que significa que cada versão é instalada em uma pasta própria separada com versão. 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 quando excluir versões mais antigas de um determinado pacote de estrutura, com base na presença de referências em tempo de instalação e referências em tempo de execução para o pacote.
- Quando um aplicativo é instalado, ele pode criar uma referência em 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 tem uma dependência da versão 1.0.0.1 do mesmo pacote de estrutura.
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 o Aplicativo A e o Aplicativo B forem desinstalados pelo usuário, o requisito de referência em tempo de instalação não será mais válido e será 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
- Usar o runtime do SDK do Aplicativo Windows para aplicativos empacotados com localização externa ou não empacotado
- Usar a API de dependência dinâmica para referenciar pacotes MSIX em tempo de execução
- Guia de implantação do SDK do Aplicativo Windows para aplicativos dependentes de estrutura empacotados com localização externa ou sem empacotamento
- Arquitetura de runtime para o SDK de Aplicativo do Windows
- Tutorial: Usar a API bootstrapper em um aplicativo empacotado com localização externa ou não empacotado que usa o SDK do Aplicativo Windows
Windows developer