共用方式為


.NET 上無法使用 .NET Framework 技術

.NET Framework 連結庫可用的數種技術無法與 .NET 6+ 搭配使用,例如應用程式網域、遠端和程式代碼存取安全性 (CAS)。 如果您的連結庫依賴此頁面所列的一或多個技術,請考慮所述的替代方法。

如需 API 相容性的詳細資訊,請參閱 .NET 中的重大變更

應用程式域

應用程式域 (AppDomains) 會彼此隔離應用程式。 AppDomain 需要運行時間支援,而且資源昂貴。 不支援建立更多應用程式網域,而且未來沒有新增此功能的計劃。 針對程式代碼隔離,請使用個別的進程或容器做為替代方案。 若要動態載入元件,請使用 AssemblyLoadContext 類別。

為了簡化從 .NET Framework 移轉程序代碼,.NET 6+ 會公開一些 AppDomain API 介面。 某些 API 能正常運作(例如,AppDomain.UnhandledException),有些成員不會執行任何動作(例如,SetCachePath),有些則會拋出 PlatformNotSupportedException(例如,CreateDomain)。 檢查您在 dotnet/runtime GitHub 存放庫中,針對 System.AppDomain 參考來源 所使用的類型。 請務必選取符合實作版本的分支。

遠端處理

.NET 6+ 不支援 .NET 遠端處理。 .NET Remoting 被識別為一個有問題的架構。 它用於跨不再支援的應用程式域進行通訊。 此外,遠端處理需要運行時間支援,這是成本高昂的維護。

針對跨進程的簡單通訊,請考慮跨進程通訊 (IPC) 機制作為遠端處理的替代方式,例如 System.IO.Pipes 類別或 MemoryMappedFile 類別。 針對更複雜的案例,開放原始碼 StreamJsonRpc 專案提供跨平臺 .NET Standard 遠端架構,可在現有串流或管道連線之上運作。

跨計算機,使用網路型解決方案作為替代方案。 最好使用低負荷純文本通訊協定,例如 HTTP。 Kestrel 網頁伺服器,這是 ASP.NET Core 所使用的網頁伺服器,在這裡是一個選項。 此外,請考慮針對以網路為基礎的跨計算機案例使用 System.Net.Sockets。 稍早所述的 StreamJsonRpc 可用於透過 Web 套接字進行 JSON 或二進位 (透過 MessagePack) 通訊。

如需更多傳訊選項,請參閱 .NET 開放原始碼開發人員專案:傳訊

因為不支援遠端處理,因此,對委派物件 BeginInvoke()EndInvoke() 的呼叫將會擲回 PlatformNotSupportedException。 如需詳細資訊,請參閱 將委派 BeginInvoke 呼叫遷移至 .NET Core

代碼存取安全性 (CAS)

沙箱化依賴運行時間或架構來限制受管理的應用程式或連結庫使用或執行的資源,不支援 .NET Framework,因此 .NET 6+ 也不支援。 CAS 不再被視為安全性界限,因為 .NET Framework 和運行時間發生特權提升的情況太多。 此外,CAS 會讓實作更加複雜,而且通常會對不想要使用它的應用程式產生正確效能影響。

使用操作系統所提供的安全性界限,例如虛擬化、容器或用戶帳戶,以執行具有最低許可權集的進程。

安全性透明度

與 CAS 類似,安全性透明度會以宣告式方式分隔沙箱化程式代碼與安全性關鍵程式代碼,但 不再支援作為安全性界限。 Silverlight 大量使用此功能。

若要以最少的許可權集執行進程,請使用操作系統所提供的安全性界限,例如虛擬化、容器或用戶帳戶。

System.EnterpriseServices

.NET 6+ 不支援 System.EnterpriseServices (COM+)。

Workflow Foundation

.NET 6+ 不支援 Windows Workflow Foundation (WF)。 如需替代方案,請參閱 CoreWF

提示

Windows Communication Foundation (WCF) 伺服器可以在 .NET 6+ 中使用 CoreWCF NuGet 套件。 CoreWCF 1.0 已發行,如需詳細資訊,請參閱

不支援某些反射發送 API

.NET 8 和舊版 .NET (Core) 不支援儲存由 System.Reflection.Emit API 產生的元件,而且無法使用 AssemblyBuilder.Save 方法。 此外,AssemblyBuilderAccess 列舉的下列欄位無法使用:

在 .NET 9 中,已實作 PersistedAssemblyBuilder,並將 AssemblyBuilder.Save 方法新增回反射發出程式庫。 若要深入瞭解如何使用此 API,請參閱 System.Reflection.Emit.PersistedAssemblyBuilder 類別

如需 .NET 中不同 AssemblyBuilder 實作的詳細資訊,請參閱 System.Reflection.Emit.AssemblyBuilder 類別

載入多模組元件

.NET 6+ 不支援包含多個模組的元件(MSBuild 中的OutputType=Module)。

或者,請考慮將個別模組合併成單一元件檔案。

XSLT 腳本區塊

XSLT 腳本區塊 僅支援 .NET Framework。 .NET 6 或更新版本不支持它們。

另請參閱