Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Después de actualizar a Visual Studio 2022, es posible que se produzca un problema en el que la experiencia en tiempo de diseño de la aplicación deja de funcionar. Esto podría estar relacionado con la referencia a un componente de 32 bits. Visual Studio 2022 es un proceso de 64 bits y no puede cargar componentes de 32 bits, independientemente de la tecnología subyacente, como .NET Framework, .NET o COM\ActiveX. Es posible que no se dé cuenta de que tiene referencias a componentes de 32 bits hasta que intente actualizar Visual Studio. Las referencias que se compilan a 64 bits o se dirigen a AnyCPU
siguen funcionando. También se encontrará con el mismo problema si un componente al que hace referencia se compila a AnyCPU
, pero sucede que hace referencia a algo de 32 bits.
Cuál es el problema
El código de Windows Forms se ejecuta en dos modos: tiempo de diseño y tiempo de ejecución. En tiempo de ejecución, estás ejecutando en el modo para el cual compilaste: 32-bit o 64-bit; .NET Framework o .NET. En tiempo de diseño, el código se ejecuta dentro de Visual Studio, que es un proceso de .NET Framework de 64 bits. Si el código del proyecto no coincide con ese entorno, no se puede ejecutar en el diseñador. Por ejemplo, si el proyecto tiene como destino .NET Framework de 32 bits o .NET de 64 bits, no coincide con el proceso de .NET Framework de 64 bits de Visual Studio. Y ese es el problema: el diseñador de Windows Forms en Visual Studio no puede crear instancias de componentes de 32 bits o componentes de .NET directamente, solo puede crear instancias de componentes de .NET Framework de 64 bits. Para corregir estos problemas de integración, el equipo de Windows Forms creó el diseñador fuera de proceso para Visual Studio que actúa como una capa de traducción para el diseñador de Windows Forms. El diseñador externo se comunica con el diseñador de .NET Framework de Visual Studio de 64 bits en representación de su código para poder usar el diseñador con proyectos de .NET.
Las versiones anteriores de Visual Studio estaban dirigidas a 32 bits, y tu proyecto probablemente se compiló en AnyCPU
, que seleccionaría 32 bits mientras estaba en modo de diseño para coincidir con Visual Studio. Las referencias específicas de 32 bits funcionaban, pero si tenía una referencia específica de 64 bits, podría haber tenido un problema con el diseñador. Con Visual Studio 2022, se revierte el problema. Visual Studio 2022 solo está disponible en 64 bits. Componentes y bibliotecas que se compilaron como AnyCPU
son compatibles tanto con entornos de 32 bits como de 64 bits y no tienen problemas al ejecutarse en Visual Studio 2022 de 64 bits. Sin embargo, después de actualizar a Visual Studio 2022, es posible que los proyectos no se ejecuten en tiempo de diseño si el proyecto se basa en un componente específico de 32 bits. Esto es incluso el caso cuando el componente al que se hace referencia está compilado para AnyCPU
, pero referencia directamente un componente de 32 bits o una biblioteca COM\ActiveX de 32 bits.
En resumen, el diseñador de Windows Forms no puede usar componentes de 32 bits en Visual Studio 2022, que es una aplicación de 64 bits. El diseñador fuera de proceso se creó para ayudar a Windows Forms para aplicaciones .NET durante el tiempo de diseño tanto para 32 bits como para 64 bits. Este diseñador ahora ayuda a cargar componentes de .NET Framework de 32 y 64 bits.
¿Qué puede hacer?
Hay algunos cambios de diseño que debe tener en cuenta, lo que podría ayudar al proyecto.
Actualice de .NET Framework a .NET 8+.
.NET usa el diseñador fuera de proceso, que ayuda con problemas de diseñador de 32 bits.
Con .NET Framework, establezca la aplicación como destino
AnyCPU
.Si tiene como destino
AnyCPU
y habilitaPrefer 32-bit
, la aplicación se ejecuta en 64 bits cuando se encuentra en tiempo de diseño de Visual Studio, pero se compila en 32 bits para el tiempo de ejecución.Vuelva a compilar el componente de 32 bits para
AnyCPU
o 64 bits.Si tiene acceso al código fuente del componente de 32 bits, intente compilarlo para
AnyCPU
o 64 bits y haga referencia a esa nueva versión.Busque un componente alternativo de 64 bits.
Si usa un componente propiedad de otra persona, compruebe si ofrecen una versión de 64 bits y hacen referencia a ella.
Pruebe el diseñador fuera de proceso.
La opción final sería habilitar el diseñador fuera de proceso para .NET Framework.
Diseñador fuera de proceso
Si tu proyecto está dirigido a .NET, ya estás utilizando el diseñador externo. Sin embargo, si todavía estás utilizando .NET Framework, debes habilitar el diseñador independiente.
Advertencia
El diseñador de 32 bits del .NET Framework actualizado, que funciona fuera de proceso, no logra alcanzar la paridad total con el diseñador anterior del .NET Framework operante en proceso, debido a las mismas diferencias arquitectónicas. Los diseñadores de controles altamente personalizados no son compatibles. Si usa bibliotecas de control personalizadas de terceros, compruebe si ofrecen versiones que admiten el Diseñador de .NET Framework fuera de proceso.
El diseñador fuera de proceso, con algunas limitaciones, controla problemas de 32 bits con Visual Studio 2022:
- .NET Framework se beneficia de una resolución de tipos mejorada.
- Las referencias activeX y COM se admiten en .NET Framework y .NET.
- El diseñador en proceso de Visual Studio detecta errores de carga de ensamblados de 32 bits y puede sugerir la habilitación del diseñador fuera de proceso.
Utilizar el diseñador fuera del proceso
La compatibilidad con referencias de 32 bits requiere Visual Studio 17.9 o posterior. Habilite esta opción agregando la siguiente <PropertyGroup>
configuración al archivo del proyecto:
<PropertyGroup>
<UseWinFormsOutOfProcDesigner>True</UseWinFormsOutOfProcDesigner>
</PropertyGroup>
Después de modificar el archivo del proyecto, vuelva a cargar el proyecto.
Detección de problemas de 32 bits
Actualmente, cuando Visual Studio detecta que una referencia de 32 bits no se carga, se le pide que habilite el diseñador fuera de proceso de Windows Forms. Si acepta habilitarlo, el proyecto se actualiza automáticamente y, a continuación, se vuelve a cargar.
Esta característica de detección se controla en el menú de Visual Studio, en Herramientas>Opciones>características de vista previa.
Consulte también
.NET Desktop feedback