Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Dopo l'aggiornamento a Visual Studio 2022, potrebbe verificarsi un problema a causa del quale l'esperienza in fase di progettazione dell'app smette di funzionare. Questo problema può essere correlato al riferimento a un componente a 32 bit. Visual Studio 2022 è un processo a 64 bit e non può caricare componenti a 32 bit, indipendentemente dalla tecnologia sottostante, ad esempio .NET Framework, .NET o COM\ActiveX. È possibile che non ci si renda conto di avere riferimenti a componenti a 32 bit fino a quando non si tenta di aggiornare Visual Studio. Riferimenti compilati a 64 bit o che hanno come destinazione AnyCPU
continuano a funzionare. Si verificherà lo stesso problema se un componente a cui fai riferimento compila a AnyCPU
, ma fa riferimento a qualcosa a 32 bit.
Qual è il problema
Il codice Windows Form viene eseguito in due modalità: fase di progettazione e runtime. Durante l'esecuzione, si opera nell'ambiente per cui è stato compilato: a 32 bit o a 64 bit; .NET Framework o .NET. In fase di progettazione, il codice viene eseguito all'interno di Visual Studio, ovvero un processo .NET Framework a 64 bit. Se il codice del progetto non corrisponde a tale ambiente, non può essere eseguito nella finestra di progettazione. Ad esempio, se il progetto ha come destinazione .NET Framework a 32 bit o .NET a 64 bit, non corrisponde al processo di .NET Framework a 64 bit di Visual Studio. Questo è il problema: la finestra di progettazione di Windows Form in Visual Studio non può creare un'istanza diretta di componenti a 32 bit o componenti .NET, ma solo creare un'istanza di componenti .NET Framework a 64 bit. Per risolvere questi problemi di integrazione, il team di Windows Forms ha creato il designer out-of-process per Visual Studio che funge da livello di traduzione per il designer di Windows Forms. Il progettista out-of-process comunica con il progettista di .NET Framework a 64 bit di Visual Studio per conto del codice dell'utente, così che sia possibile utilizzare il progettista con i progetti .NET.
Le versioni precedenti di Visual Studio erano rivolte ai 32 bit e il tuo progetto è stato probabilmente compilato per AnyCPU
, il quale sceglierebbe 32 bit in modalità progettazione in modo da corrispondere a Visual Studio. I riferimenti specifici a 32 bit hanno funzionato, ma se avevi un riferimento specifico a 64 bit, potresti aver riscontrato un problema con il designer. Con Visual Studio 2022, il problema è stato invertito. Visual Studio 2022 è disponibile solo a 64 bit. Componenti e librerie compilati come AnyCPU
funzionano sia a 32 bit che a 64 bit e non presentano un problema in esecuzione in Visual Studio 2022 a 64 bit. Tuttavia, dopo l'aggiornamento a Visual Studio 2022, i progetti potrebbero non essere eseguiti in fase di progettazione se il progetto si basa su un componente specifico a 32 bit. Questo è anche il caso in cui il componente a cui si fa riferimento viene compilato per AnyCPU
, ma fa riferimento direttamente a un componente a 32 bit o a una libreria COM\ActiveX a 32 bit.
Per riepilogare, i componenti a 32 bit non possono essere usati dal designer di Windows Forms in Visual Studio 2022, che è un'app a 64 bit. La di progettazione out-of-process è stata creata per consentire a Windows Form per le app .NET durante la fase di progettazione sia a 32 bit che a 64 bit. Questo designer ora aiuta a caricare componenti .NET Framework a 32 bit e a 64 bit.
Cosa potete fare
Esistono alcune modifiche di progettazione da considerare, che potrebbero aiutare il progetto.
Eseguire l'aggiornamento da .NET Framework a .NET 8+.
.NET utilizza il designer out-of-process, che aiuta a risolvere i problemi dei designer a 32 bit.
Con .NET Framework, configura la tua app per puntare a
AnyCPU
.Se si ha come destinazione
AnyCPU
e si abilitaPrefer 32-bit
, l'app viene eseguita a 64 bit in fase di progettazione di Visual Studio, ma viene compilata in 32 bit per la fase di esecuzione.Ricompilare il componente a 32 bit per
AnyCPU
o 64 bit.Se si ha accesso al codice sorgente per il componente a 32 bit, provare a compilarlo per
AnyCPU
o a 64 bit e fare riferimento a tale nuova versione.Trova un componente alternativo a 64 bit.
Se si usa un componente di proprietà di un altro utente, verificare se offrono una versione a 64 bit e farvi riferimento.
Provare la finestra di progettazione out-of-process.
L'opzione finale consiste nell'abilitare il designer out-of-process per .NET Framework.
Designer esterno al processo
Se il tuo progetto è destinato a .NET, stai già usando il designer out-of-process. Tuttavia, se si usa ancora .NET Framework, è necessario abilitare la finestra di progettazione out-of-process.
Avvertimento
La finestra di progettazione .NET Framework a 32 bit aggiornata non raggiunge la parità completa con la precedente finestra di progettazione .NET Framework nello stesso processo a causa delle differenze architettoniche. I progettisti di controlli altamente personalizzati non sono compatibili. Se si utilizzano librerie di controlli personalizzate di terze parti, verificare se offrono versioni che supportano il Designer di .NET Framework fuori processo.
Il designer ,esterno al processo, con limitazioni, gestisce i problemi di compatibilità a 32 bit con Visual Studio 2022:
- .NET Framework trae vantaggio da una risoluzione dei tipi migliorata.
- I riferimenti ActiveX e COM sono supportati sia in .NET Framework che in .NET.
- Il designer in-process di Visual Studio rileva le anomalie di caricamento degli assembly a 32 bit e può suggerire l'abilitazione del designer out-of-process.
Usare la finestra di progettazione out-of-process
Il supporto per i riferimenti a 32 bit richiede Visual Studio 17.9 o versione successiva. Abilitarlo aggiungendo l'impostazione di <PropertyGroup>
seguente al file di progetto:
<PropertyGroup>
<UseWinFormsOutOfProcDesigner>True</UseWinFormsOutOfProcDesigner>
</PropertyGroup>
Dopo aver modificato il file di progetto, ricaricare il progetto.
Rilevamento dei problemi a 32 bit
Attualmente, quando Visual Studio rileva che un riferimento a 32 bit non viene caricato, richiede di abilitare la finestra di progettazione out-of-process di Windows Form. Se si accetta di abilitarlo, il progetto viene aggiornato automaticamente e quindi ricaricato.
Questa funzionalità di rilevamento viene controllata nel menu di Visual Studio, sotto Strumenti Opzioni>Opzioni>Funzionalità di Anteprima.
Vedere anche
.NET Desktop feedback