事件
針對 32 位元問題進行疑難排解 (Windows Forms .NET)
升級至 Visual Studio 2022 之後,您可能會遇到應用程式的設計階段體驗停止運作的問題。 這可能與參考 32 位元元件有關。 Visual Studio 2022 是 64 位元處理序,無論基礎技術為何,都無法載入 32 位元元件,例如 .NET Framework、.NET 或 COM\ActiveX。 在嘗試升級 Visual Studio 之前,您可能沒有意識到您參考了 32 位元元件。 編譯為 64 位元或以 AnyCPU
為目標的參考仍然有效。 如果您參考的元件編譯為 AnyCPU
,但碰巧參考了 32 位元的項目,則也會遇到相同的問題。
Windows Forms 程式碼會以兩種模式執行:設計階段和執行階段。 在執行階段,您會以所編譯的任何模式執行:32 位元或 64 位元;.NET Framework 或 .NET。 在設計階段,您的程式碼會在 Visual Studio 內執行,這是 64 位元的 .NET Framework 處理序。 如果專案程式碼與該環境不相符,就無法在設計工具中執行。 例如,若您的專案是以 32 位元 .NET Framework 或 64 位元 .NET 為目標,則其與 Visual Studio 的 64 位元 .NET Framework 處理序不相符。 這就是問題所在:Visual Studio 中的 Windows Forms 設計工具無法直接具現化 32 位元元件或 .NET 元件,該工具只能具現化 64 位元 .NET Framework 元件。 為了修正這些整合問題,Windows Forms 小組為 Visual Studio 建立了跨處理序設計工具,其作用類似於 Windows Forms 設計工具的轉換層。 跨處理序設計工具會代表您的程式碼與 Visual Studio 64 位元 .NET Framework 設計工具進行通訊,讓您可以搭配 .NET 專案使用設計工具。
舊版 Visual Studio 以 32 位元為目標,而您的專案可能已編譯為 AnyCPU
,這會在設計模式中挑選 32 位元以符合 Visual Studio。 32 位元的特定參考能夠運作,但如果是 64 位元的特定參考,則可能會遇到設計工具問題。 使用 Visual Studio 2022 時,問題發生了逆轉。 Visual Studio 2022 僅適用於 64 位元。 編譯為 AnyCPU
的元件和程式庫可在 32 位元和 64 位元中運作,且在 Visual Studio 2022 64 位元中執行時不會發生問題。 但是,升級到 Visual Studio 2022 之後,如果您的專案依賴 32 位特定元件,則該專案可能無法在設計階段執行。 即使您參考的元件已針對 AnyCPU
編譯,但碰巧直接參考了 32 位元元件或 32 位元 COM\ActiveX 程式庫時,也會出現這種情況。
總而言之,Visual Studio 2022 中的 Windows Forms 設計工具無法使用 32 位元元件,其為 64 位元應用程式。 建立跨處理序設計工具是為了在設計階段為 32 位元和 64 位元適用於 .NET 應用程式的 Windows Forms 提供協助。 此設計工具現在可協助載入 32 位元和 64 位元 .NET Framework 元件。
您應該考慮進行一些設計變更,這些變更對您的專案可能有所幫助。
從 .NET Framework 升級至 .NET 8+。
.NET 使用跨處理序設計工具,這可協助解決 32 位元設計工具問題。
使用 .NET Framework,將您的應用程式設定為以
AnyCPU
為目標。如果您以
AnyCPU
為目標並啟用Prefer 32-bit
,應用程式在 Visual Studio 設計階段中會在 64 位元下執行,但針對執行階段則會編譯為 32 位元。針對
AnyCPU
或 64 位元重新編譯 32 位元元件。如果您擁有 32 位元元件的原始程式碼存取權,請嘗試針對
AnyCPU
或 64 位元進行編譯,並參考該新版本。尋找 64 位元替代元件。
如果您使用其他人所擁有的元件,請檢查其是否提供 64 位元版本,並參考該版本。
試用跨處理序設計工具。
最後一個選項是為 .NET Framework 啟用跨處理序設計工具。
如果您的專案以 .NET 為目標,則表示您已經在使用跨處理序設計工具。 不過,如果您仍在使用 .NET Framework,則必須啟用跨處理序設計工具。
警告
由於相同的架構差異,更新的跨處理序 32 位元 .NET Framework 設計工具不完全等同於舊的同處理序 .NET Framework 設計工具。 高度自訂的控制項設計工具不相容。 如果您使用來自第三方的自訂控制項程式庫,請檢查這些程式庫是否提供支援跨處理序 .NET Framework 設計工具的版本。
跨處理序設計工具可處理 Visual Studio 2022 的 32 位元問題,但有一些限制:
- .NET Framework 受益於改良的類型解析。
- .NET Framework 和 .NET 都支援 ActiveX 和 COM 參考。
- Visual Studio 中的同處理序設計工具可偵測 32 位元元件載入失敗,並建議啟用跨處理序設計工具。
支援 32 位元參考需要 Visual Studio 17.9 或更新版本。 透過將下列 <PropertyGroup>
設定新增至專案檔,以啟用該工具:
<PropertyGroup>
<UseWinFormsOutOfProcDesigner>True</UseWinFormsOutOfProcDesigner>
</PropertyGroup>
修改專案檔之後,請重新載入該專案。
目前,當 Visual Studio 偵測到 32 位元參考無法載入時,其會提示您啟用 Windows Forms 跨處理序設計工具。 如果您同意啟用,系統會為您更新專案,然後予以重新載入。
Visual Studio 中視窗的影像,提示使用者啟用跨處理序設計工具。
您可在 Visual Studio 功能表的 [工具]>[選項]>[預覽功能] 底下控制此偵測功能。
更多資源
訓練
學習路徑
Use advance techniques in canvas apps to perform custom updates and optimization - Training
Use advance techniques in canvas apps to perform custom updates and optimization