Freigeben über


Problembehandlung von 32-Bit-Problemen

Nach dem Upgrade auf Visual Studio 2022 kann es vorkommen, dass Sie ein Problem haben, bei dem die Entwurfszeit Ihrer Anwendung nicht mehr funktioniert. Dies kann mit dem Verweisen auf eine 32-Bit-Komponente zusammenhängen. Visual Studio 2022 ist ein 64-Bit-Prozess und kann keine 32-Bit-Komponenten laden, unabhängig von der zugrunde liegenden Technologie, z. B. .NET Framework, .NET oder COM\ActiveX. Es könnte sein, dass Ihnen nicht auffällt, dass Sie Verweise auf 32-Bit-Komponenten haben, bis Sie erst versuchen, Visual Studio zu aktualisieren. Verweise, die auf 64-Bit kompilieren oder AnyCPU als Ziel haben, funktionieren weiterhin. Das gleiche Problem tritt auch auf, wenn eine Komponente, auf die Sie verweisen, in AnyCPU kompiliert wird, aber zufällig auf etwas mit 32 Bit referenziert.

Was ist das Problem

Windows Forms-Code wird in zwei Modi ausgeführt: Entwurfsmodus und Ausführungsmodus. Zur Laufzeit laufen Sie in dem Modus, für den Sie kompiliert haben: 32-Bit oder 64-Bit, .NET Framework oder .NET. Zur Entwurfszeit wird Ihr Code in Visual Studio ausgeführt, bei dem es sich um einen 64-Bit-.NET Framework-Prozess handelt. Wenn Ihr Projektcode nicht mit dieser Umgebung übereinstimmt, kann er nicht im Designer ausgeführt werden. Wenn Ihr Projekt beispielsweise auf 32-Bit .NET Framework oder 64-Bit .NET ausgerichtet ist, stimmt es nicht mit dem 64-Bit-.NET Framework-Prozess von Visual Studio überein. Und das ist das Problem: Der Windows Forms-Designer in Visual Studio kann 32-Bit-Komponenten oder .NET-Komponenten nicht direkt instanziieren, es kann nur 64-Bit .NET Framework-Komponenten instanziieren. Um diese Integrationsprobleme zu beheben, hat das Windows Forms-Team den Out-of-Process-Designer für Visual Studio erstellt, der wie eine Übersetzungsebene für den Windows Forms-Designer fungiert. Der Out-of-Process-Designer kommuniziert im Namen Ihres Codes mit dem Visual Studio 64-Bit .NET Framework Designer, so dass Sie den Designer mit .NET-Projekten verwenden können.

Frühere Versionen von Visual Studio zielten auf 32-Bit ab, und Ihr Projekt wurde wahrscheinlich zu AnyCPUkompiliert, was 32-Bit während des Entwurfsmodus zur Übereinstimmung mit Visual Studio auswählen würde. 32-Bit-spezifische Referenzen funktionierten, aber wenn Sie eine 64-Bit-spezifische Referenz hatten, könnten Sie ein Problem mit dem Designer bekommen haben. Mit Visual Studio 2022 wurde das Problem rückgängig gemacht. Visual Studio 2022 ist nur in 64-Bit verfügbar. Komponenten und Bibliotheken, die als AnyCPU kompiliert wurden, funktionieren sowohl in 32-Bit als auch in 64-Bit und laufen problemlos in Visual Studio 2022 64-Bit. Nach dem Upgrade auf Visual Studio 2022 kann es jedoch vorkommen, dass Ihre Projekte zur Entwurfszeit nicht ausgeführt werden, wenn das Projekt auf einer 32-Bit-spezifischen Komponente basiert. Dies ist sogar der Fall, wenn Ihre referenzierte Komponente für AnyCPUkompiliert wird, aber zufällig direkt auf eine 32-Bit-Komponente oder eine 32-Bit-COM\ActiveX-Bibliothek verweist.

Zusammenfassend können 32-Bit-Komponenten nicht vom Windows Forms-Designer in Visual Studio 2022 verwendet werden, bei dem es sich um eine 64-Bit-App handelt. Der Out-of-Process-Designer wurde entwickelt, um Windows Forms für .NET-Anwendungen während der Entwurfszeit sowohl für 32-Bit als auch für 64-Bit zu unterstützen. Dieser Designer hilft jetzt beim Laden von 32-Bit- und 64-Bit-.NET Framework-Komponenten.

Was können Sie tun?

Es gibt einige Entwurfsänderungen, die Sie berücksichtigen sollten, was Ihrem Projekt möglicherweise hilft.

  • Upgrade von .NET Framework auf .NET 8+.

    .NET verwendet den Out-of-Process-Designer, der bei Problemen mit 32-Bit-Designern hilft.

  • Mit .NET Framework können Sie festlegen, dass Ihre Anwendung AnyCPU als Ziel hat.

    Wenn Sie AnyCPU als Ziel festlegen und Prefer 32-bitaktivieren, wird Ihre App während der Designzeit in Visual Studio unter 64-Bit ausgeführt, aber bei der Laufzeit in 32-Bit kompiliert.

  • Kompilieren Sie die 32-Bit-Komponente neu für AnyCPU oder ein 64-Bit-System.

    Wenn Sie Zugriff auf den Quellcode für die 32-Bit-Komponente haben, versuchen Sie, ihn für AnyCPU oder 64-Bit zu kompilieren und auf diese neue Version zu verweisen.

  • Suchen Sie eine 64-Bit-alternative Komponente.

    Wenn Sie eine Komponente verwenden, die einer anderen Person gehört, überprüfen Sie, ob sie eine 64-Bit-Version anbieten, und verweisen Sie darauf.

  • Probieren Sie den Out-of-Process-Designer aus.

    Ihre letzte Möglichkeit wäre es, den Out-of-Process-Designer für das .NET Framework zu aktivieren.

Designer außerhalb des Prozesses

Wenn Ihr Projekt auf .NET ausgerichtet ist, verwenden Sie bereits den Out-of-Process-Designer. Wenn Sie jedoch weiterhin .NET Framework verwenden, müssen Sie den Out-of-Process-Designer aktivieren.

Warnung

Der aktualisierte Out-of-Process-Designer für das 32-Bit .NET Framework erreicht aufgrund der gleichen architektonischen Unterschiede nicht die volle Parität mit dem alten In-Process-Designer für das .NET Framework. Stark angepasste Process-Designer sind nicht kompatibel. Wenn Sie benutzerdefinierte Steuerelementbibliotheken von Drittanbietern verwenden, überprüfen Sie, ob sie Versionen anbieten, die den out-of-process .NET Framework Designer unterstützen.

Der Out-of-Process-Designer bewältigt, mit einigen Einschränkungen, 32-Bit-Probleme mit Visual Studio 2022:

  • Das .NET Framework profitiert von einer verbesserten Typauflösung.
  • ActiveX- und COM-Verweise werden sowohl in .NET Framework als auch in .NET unterstützt.
  • Der In-Process-Designer in Visual Studio erkennt Fehler beim Laden von 32-Bit-Assemblys und kann vorschlagen, den Out-of-Process-Designer zu aktivieren.

Verwenden des Out-of-Process-Designers

Die Unterstützung für 32-Bit-Referenzen erfordert Visual Studio 17.9 oder höher. Aktivieren Sie sie, indem Sie der Projektdatei die folgende <PropertyGroup>-Einstellung hinzufügen:

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

Laden Sie das Projekt neu, nachdem Sie die Projektdatei geändert haben.

Erkennung von 32-Bit-Problemen

Wenn Visual Studio derzeit feststellt, dass eine 32-Bit-Referenz nicht geladen werden kann, werden Sie aufgefordert, den Windows Forms Out-of-Process-Designer zu aktivieren. Wenn Sie der Aktivierung zustimmen, wird das Projekt für Sie aktualisiert und dann neu geladen.

Das Bild eines Fensters aus Visual Studio, das den Benutzer auffordert, den Out-of-Process-Designer zu aktivieren.

Diese Erkennungsfunktion wird im Menü von Visual Studio unter Extras>Optionen>Vorschau-Funktionen gesteuert.

Siehe auch