Compartilhar via


Solucionar problemas de 32 bits

Depois de atualizar para o Visual Studio 2022, você pode encontrar um problema em que a experiência de tempo de design do aplicativo pare de funcionar. Isso pode estar relacionado à referência a um componente de 32 bits. O Visual Studio 2022 é um processo de 64 bits e não pode carregar componentes de 32 bits, independentemente da tecnologia subjacente, como .NET Framework, .NET ou COM\ActiveX. Talvez você não perceba que tem referências a componentes de 32 bits até tentar atualizar o Visual Studio. As referências compiladas para 64 bits ou destinadas a AnyCPU continuam funcionando. Você também terá o mesmo problema se um componente que você estiver referenciando compilar para AnyCPU mas fizer referência a algo de 32 bits.

Qual é o problema?

O código do Windows Forms é executado em dois modos: tempo de design e tempo de execução. Em tempo de execução, você está operando no modo de operação para o qual foi compilado: 32-bit ou 64-bit; .NET Framework ou .NET Core. No tempo de design, seu código é executado dentro do Visual Studio, que é um processo do .NET Framework de 64 bits. Se o código do projeto não corresponder a esse ambiente, ele não poderá ser executado no designer. Por exemplo, se o seu projeto estiver direcionado para o .NET Framework de 32 bits ou o .NET de 64 bits, ele não será compatível com o processo do .NET Framework de 64 bits do Visual Studio. E esse é o problema: o designer do Windows Forms no Visual Studio não pode instanciar componentes de 32 bits ou componentes do .NET diretamente, ele só pode instanciar componentes do .NET Framework de 64 bits. Para corrigir esses problemas de integração, a equipe do Windows Forms criou o designer fora do processo para o Visual Studio, que atua como uma camada de tradução para o designer do Windows Forms. O designer fora de processo se comunica com o designer do .NET Framework de 64 bits do Visual Studio em nome do seu código para que você possa usar o designer com projetos .NET.

Versões anteriores do Visual Studio eram direcionadas a 32 bits, e seu projeto provavelmente foi compilado para AnyCPU, que escolheria 32 bits no modo de design para corresponder ao Visual Studio. Referências específicas de 32 bits funcionaram, mas se você tiver uma referência específica de 64 bits, talvez tenha tido um problema com o designer. Com o Visual Studio 2022, o problema foi revertido. O Visual Studio 2022 só está disponível em 64 bits. Componentes e bibliotecas que foram compilados como AnyCPU funcionam em 32 bits e 64 bits e não têm um problema em execução no Visual Studio 2022 de 64 bits. Porém, depois de atualizar para o Visual Studio 2022, seus projetos poderão falhar ao serem executados em tempo de design se dependerem de um componente específico de 32 bits. Esse é até mesmo o caso quando o componente referenciado é compilado para AnyCPU, mas faz referência diretamente a um componente de 32 bits ou à biblioteca COM\ActiveX de 32 bits.

Para resumir, os componentes de 32 bits não podem ser usados pelo designer do Windows Forms no Visual Studio 2022, que é um aplicativo de 64 bits. O designer fora do processo foi criado para ajudar o Windows Forms para aplicativos .NET durante tanto o tempo de desenvolvimento para 32 bits quanto para 64 bits. Esse designer agora ajuda no carregamento de componentes do .NET Framework de 32 bits e 64 bits.

O que você pode fazer

Há algumas alterações de design que você deve considerar, o que pode ajudar seu projeto.

  • Atualize do .NET Framework para o .NET 8+.

    O .NET usa o designer externo ao processo, que ajuda com questões de designer de 32 bits.

  • Com o .NET Framework, defina seu aplicativo como destino AnyCPU.

    Se você definir AnyCPU como destino e habilitar Prefer 32-bit, seu aplicativo será executado em 64 bits no meio de design do Visual Studio, mas será compilado para 32 bits no meio de execução.

  • Recompile o componente de 32 bits para AnyCPU ou 64 bits.

    Se você tiver acesso ao código-fonte do componente de 32 bits, tente compilá-lo para AnyCPU ou 64 bits e referencie essa nova versão.

  • Encontre um componente alternativo de 64 bits.

    Se você estiver usando um componente de propriedade de outra pessoa, verifique se ele oferece uma versão de 64 bits e faça referência a isso.

  • Experimente o designer fora do processo principal.

    Sua opção final seria habilitar o designer fora de processo para o .NET Framework.

Designer externo ao processo

Se o seu projeto for destinado ao .NET, você já está usando o designer fora de processo. No entanto, se você ainda estiver usando o .NET Framework, precisará habilitar o designer fora de processo.

Aviso

O Designer atualizado do .NET Framework de 32 bits fora do processo não atinge a paridade total com o antigo Designer do .NET Framework em processo devido às mesmas diferenças arquitetônicas. Designers de controle altamente personalizados não são compatíveis. Se você usar bibliotecas de controle personalizadas de terceiros, verifique se elas oferecem versões que dão suporte ao Designer do .NET Framework fora de processo.

O designer fora do processo, com algumas limitações, resolve problemas de 32 bits com o Visual Studio 2022:

  • O .NET Framework se beneficia da resolução de tipos aprimorada.
  • As referências ActiveX e COM têm suporte no .NET Framework e no .NET.
  • O designer em processo no Visual Studio detecta falhas de carregamento de assembly de 32 bits e pode sugerir a ativação do designer fora de processo.

Usar o designer fora de processo

O suporte para referências de 32 bits requer o Visual Studio 17.9 ou posterior. Habilite-o adicionando a seguinte configuração de <PropertyGroup> ao arquivo de projeto:

<PropertyGroup>
    <UseWinFormsOutOfProcDesigner>True</UseWinFormsOutOfProcDesigner>
</PropertyGroup>

Depois de modificar o arquivo de projeto, recarregue o projeto.

Detecção de problemas de 32 bits

Atualmente, quando o Visual Studio detecta que uma referência de 32 bits falha ao carregar, ele solicita que você habilite o designer fora de processo do Windows Forms. Se você concordar em habilitá-lo, o projeto será atualizado para você e recarregado.

a imagem de uma janela do Visual Studio solicitando que o usuário habilite o designer fora de processo.

Esse recurso de detecção é controlado no menu do Visual Studio, em Ferramentas>Opções>Recursos de Visualização.

Consulte também