從 .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 應用程式之前,請考慮下列相依性:

  1. .NET 的Project檔案使用的格式與.NET Framework不同。
  2. 您的專案可能會使用 .NET 中無法使用的 API。
  3. 協力廠商控制項和程式庫可能尚未移植到 .NET,而且只能供.NET Framework使用。
  4. 您的專案會使用 .NET 中不再提供的技術

.NET 使用 Windows Forms 和 WPF 的開放原始碼版本,並包含.NET Framework的增強功能。

如需將傳統型應用程式移轉至 .NET 6 的教學課程,請參閱下列其中一篇文章:

Windows特定 API

應用程式仍然可以在 .NET 支援的平臺上叫用原生程式庫。 這項技術不限於Windows。 不過,如果您要參考的程式庫Windows特定,例如user32.dllkernel32.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 類別。 如需更複雜的案例,請考慮使用gRPCRESTful Web API 服務) (StreamJsonRpcASP.NET Core等架構。

  • 代碼啟用安全性 (CAS)

    CAS 是.NET Framework支援的沙箱化技術,但在 .NET Framework 4.0 中已被取代。 它已由安全性透明度取代,而且在 .NET 中不受支援。 請改用作業系統所提供的安全性界限,例如虛擬化、容器或使用者帳戶。

  • 安全性透明度

    與 CAS 類似,此沙箱技術不再建議用於.NET Framework應用程式,而且 .NET 不支援。 請改用作業系統所提供的安全性界限,例如虛擬化、容器或使用者帳戶。

  • System.EnterpriseServices

    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。

另請參閱