從 .NET Framework 移植到 .NET 的概觀
本文提供將程式碼從 .NET Framework 移植到先前稱為 .NET Core) 之 .NET (時應該考慮的概觀。 針對許多專案,從 .NET Framework 移植到 .NET 相當簡單。 專案的複雜度會決定在初始移轉專案檔之後,您將執行多少工作。
.NET (提供應用程式模型的專案,例如程式庫、主控台應用程式和傳統型應用程式,) 通常需要稍微變更。 需要新應用程式模型的專案,例如從 ASP.NET 移至 ASP.NET Core,需要更多工作。 來自舊應用程式模型的許多模式都有可在轉換期間使用的對等專案。
Windows桌面技術
為.NET Framework建立的許多應用程式都會使用桌面技術,例如Windows Forms或Windows Presentation Foundation (WPF) 。 Windows Forms和 WPF 都已移植到 .NET,但這些技術仍Windows僅限技術。
移轉Windows Forms或 WPF 應用程式之前,請考慮下列相依性:
- .NET 的Project檔案使用的格式與.NET Framework不同。
- 您的專案可能會使用 .NET 中無法使用的 API。
- 協力廠商控制項和程式庫可能尚未移植到 .NET,而且只能供.NET Framework使用。
- 您的專案會使用 .NET 中不再提供的技術 。
.NET 使用 Windows Forms 和 WPF 的開放原始碼版本,並包含.NET Framework的增強功能。
如需將傳統型應用程式移轉至 .NET 6 的教學課程,請參閱下列其中一篇文章:
Windows特定 API
應用程式仍然可以在 .NET 支援的平臺上叫用原生程式庫。 這項技術不限於Windows。 不過,如果您要參考的程式庫Windows特定,例如user32.dll或kernel32.dll,則程式碼只適用于Windows。 針對您想要讓應用程式執行的每個平臺,您必須尋找平臺特定版本,或讓您的程式碼泛型足以在所有平臺上執行。
將應用程式從 .NET Framework 移植到 .NET 時,您的應用程式可能會使用以 .NET Framework 散發的程式庫。 .NET Framework中提供的許多 API 並未移植到 .NET,因為它們依賴Windows特定的技術,例如 Windows Registry 或GDI+繪圖模型。
Windows相容性套件提供大部分的 .NET Framework API 介面給 .NET,並透過Microsoft.Windows 提供。相容性NuGet套件。
如需詳細資訊,請參閱使用 Windows 相容性套件將程式碼移植到 .NET。
.NET Framework 相容性模式
.NET Framework相容性模式是在 .NET Standard 2.0 中引進。 此相容性模式可讓 .NET Standard 和 .NET 5+ (和 .NET Core 3.1) 專案參考僅限Windows上的.NET Framework程式庫。 並非所有專案都適合參考 .NET Framework 程式庫 (例如,如果程式庫使用 Windows Presentation Foundation (WPF) API),但它確實會解決許多移植案例。 如需詳細資訊,請參閱分析相依性以將程式碼從 .NET Framework 移植到 .NET。
無法使用的技術
.NET Framework中有一些技術不存在於 .NET 中:
-
不支援建立其他應用程式域。 針對程式碼隔離,請使用個別的進程或容器作為替代方案。
-
遠端處理用於跨不再支援的應用程式域進行通訊。 針對跨進程進行簡單的通訊,請考慮將跨進程通訊 (IPC) 機制視為遠端的替代方案,例如 System.IO.Pipes 類別或 MemoryMappedFile 類別。 如需更複雜的案例,請考慮使用gRPC或RESTful Web API 服務) (StreamJsonRpc或ASP.NET Core等架構。
-
CAS 是.NET Framework支援的沙箱化技術,但在 .NET Framework 4.0 中已被取代。 它已由安全性透明度取代,而且在 .NET 中不受支援。 請改用作業系統所提供的安全性界限,例如虛擬化、容器或使用者帳戶。
-
與 CAS 類似,此沙箱技術不再建議用於.NET Framework應用程式,而且 .NET 不支援。 請改用作業系統所提供的安全性界限,例如虛擬化、容器或使用者帳戶。
-
System.EnterpriseServices .NET 不支援 (COM+) 。
Windows Workflow Foundation (WF)
.NET 5+ (不支援 WF,包括 .NET Core) 。 如需替代方案,請參閱 CoreWF。
如需這些不支援技術的詳細資訊,請參閱.NET Core 和 .NET 5+ 上無法使用.NET Framework技術。
跨平台
.NET (先前稱為 .NET Core) 是設計成跨平臺。 如果您的程式碼不依賴Windows特定技術,它可能會在其他平臺上執行,例如 macOS、Linux 和 Android。 這包括專案類型,例如:
- 程式庫
- 以主控台為基礎的工具
- 自動化
- ASP.NET 網站
.NET Framework是僅限Windows元件。 當您的程式碼使用Windows特定技術或 API 時,例如 Windows Forms 和 Windows Presentation Foundation (WPF) ,程式碼仍然可以在 .NET 上執行,但不會在其他作業系統上執行。
您的程式庫或主控台型應用程式可以跨平臺使用,而不需要變更太多。 移植到 .NET 時,您可能會想要將此納入考慮,並在其他平臺上測試您的應用程式。
.NET Standard 的未來
.NET Standard 是 .NET API 的正式規格,可在多個 .NET 實作上使用。 .NET Standard 背後的動機是在 .NET 生態系統中建立更大的統一性。 從 .NET 5 開始,已採用不同的方法來建立統一性,而且這個新方法可消除許多案例中 .NET Standard 的需求。 如需詳細資訊,請參閱 .NET 5 和 .NET Standard。
.NET Standard 2.0 是支援.NET Framework的最後一個版本。
協助移植的工具
您可以使用不同的工具來協助自動化移轉的某些層面,而不是手動將應用程式從.NET Framework移植到 .NET。 移植複雜專案本身是複雜的程式。 這些工具可能有助於該旅程。
即使您使用工具來協助移植應用程式,您也應該檢閱本文 移植時的考慮一節 。
.NET 升級小幫手
.NET 升級小幫手是一種命令列工具,可以在不同種類的 .NET Framework 應用程式上執行。 其設計目的是協助將.NET Framework應用程式升級至 .NET 5。 執行此工具之後, 在大部分情況下,應用程式將需要更多心力才能完成移轉。 此工具包含可協助完成移轉的分析器安裝。 此工具適用于下列類型的.NET Framework應用程式:
- Windows Forms
- WPF
- ASP.NET MVC
- 主控台
- 類別庫
此工具使用本文所列的其他工具,並引導移轉程式。 如需工具的詳細資訊,請參閱 .NET 升級小幫手概觀。
try-convert
try-convert 工具是 .NET 全域工具,可將專案或整個解決方案轉換成 .NET SDK,包括將傳統型應用程式移至 .NET 5。 不過,如果您的專案具有複雜的建置程式,例如自訂工作、目標或匯入,則不建議使用此工具。
如需詳細資訊,請參閱try-convert GitHub 存放庫。
.NET Portability Analyzer
.NET 可攜性分析器是一種工具,可分析元件,並提供 .NET API 的詳細報告,這些 API 遺漏了應用程式或程式庫才能在指定的目標 .NET 平臺上移植。
若要在 Visual Studio 中使用 .NET Portability Analyzer,請從 Marketplace 安裝擴充功能。
如需詳細資訊,請參閱 .NET 可攜性分析器。
平台相容性分析器
平臺相容性分析器會分析您是否使用將在執行時間擲回 的 PlatformNotSupportedException API。 如果您從 .NET Framework 4.7.2 或更新版本移動,這並不常見,但最好檢查。 如需在 .NET 上擲回例外狀況之 API 的詳細資訊,請參閱 一律在 .NET Core 上擲回例外狀況的 API。
如需詳細資訊,請參閱 平臺相容性分析器。
移植時的考慮
將應用程式移植到 .NET 時,請考慮下列建議。
✔️ 請考慮使用 .NET 升級小幫手 來移轉您的專案。 雖然此工具處於預覽狀態,但它會自動執行本文中詳述的大部分手動步驟,並提供您繼續移轉路徑的絕佳起點。
✔️ 請考慮先檢查您的相依性。 您的相依性必須以 .NET 5、.NET Standard 或 .NET Core 為目標。
✔️ 請從NuGet packages.config檔案移轉至 PackageReference 專案檔中的設定。 使用 Visual Studio 轉換package.config 檔案。
✔️ 請考慮升級至最新的專案檔案格式,即使您尚未移植應用程式也一樣。 .NET Framework專案使用過期的專案格式。 雖然最新專案格式稱為 SDK 樣式專案,但已針對 .NET Core 和更新版本建立,但它們會使用 .NET Framework。 讓您的專案檔採用最新的格式,可讓您在未來移植應用程式。
✔️ 請將您的.NET Framework專案重定為至少.NET Framework 4.7.2。 這可確保 .NET Standard 不支援現有 API 的情況下,最新 API 替代專案的可用性。
✔️ 請考慮以 .NET 5 為目標,而不是 .NET Core 3.1。 雖然 .NET Core 3.1 長期支援 (LTS) ,但 .NET 5 是最新的,而 .NET 6 會在發行時成為 LTS。
✔️ do target .NET 5 for Windows Forms and WPF projects. .NET 5 包含許多傳統型應用程式的改善。
✔️ 如果您要移轉可能也與.NET Framework專案搭配使用的程式庫,請考慮以 .NET Standard 2.0 為目標。 您也可以將程式庫設為多重目標,以 .NET Framework 和 .NET Standard 為目標。
✔️ DO 新增Microsoft.Windows的參考。如果在移轉之後,您會收到遺漏 API 的錯誤,則相容性NuGet套件。 .NET FRAMEWORK API 介面的大部分可透過 NuGet 套件提供給 .NET。