在 .net Core 和 .net 5 + 上無法使用 .NET Framework 技術

.NET Framework 程式庫所提供的數種技術,無法搭配 .net 5 + (和 .net Core) (例如應用程式域、遠端處理和代碼啟用安全性 (CAS) )使用。 如果您的程式庫依賴此頁面上所列的一或多項技術,請考慮所述的替代方法。

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

應用程式網域

應用程式定義域 (AppDomain) 可將應用程式互相隔離。 Appdomain 需要執行時間支援,且資源成本昂貴。 不支援建立更多應用程式域,而且未來並沒有任何計畫可新增這項功能。 針對程式碼隔離,請使用個別的進程或容器做為替代方案。 若要以動態方式載入元件,請使用 AssemblyLoadContext 類別。

為了讓程式碼從 .NET Framework 更容易遷移,.net 5 + 會公開一些 AppDomain API 介面。 某些 API 會正常運作 (例如 AppDomain.UnhandledException),某些成員不會執行任何動作 (例如 SetCachePath),而其中某些會擲回 PlatformNotSupportedException (例如 CreateDomain)。 在dotnet/runtime GitHub 存放庫中,檢查您用於 System.AppDomain 參考來源的類型。 請務必選取符合您的已執行版本的分支。

遠端

.Net 5 + (和 .NET Core) 不支援 .NET 遠端處理。 .NET 遠端處理被視為有問題的架構。 它是用來跨應用程式域進行通訊,這些網域已不再受到支援。 此外,遠端處理需要執行時間支援,但維護成本昂貴。

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

針對跨機器通訊,請使用以網路為基礎的替代方案。 最好是使用額外負荷較低的純文字通訊協定,例如 HTTP。 Kestrel web 伺服器是 ASP.NET Core 所使用的 web 伺服器,它是此處的選項。 此外,請考慮 System.Net.Sockets 針對以網路為基礎的跨電腦案例使用。 先前所述的 StreamJsonRpc 可用於透過 web 通訊端的 MessagePack) 通訊的 JSON 或二進位 (。

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

程式碼存取安全性 (CAS)

在 .NET Framework 上,不支援使用執行時間或架構來限制受管理應用程式或程式庫所使用或執行之資源的沙箱化,因此在 .net Core 和 .net 5 + 中也不支援。 .NET Framework 和執行階段中發生太多提高權限的情況,因而無法繼續將 CAS 視為安全性界限。 此外,CAS 讓執行變得更複雜,而且通常會對不打算使用它的應用程式具有正確性效能的影響。

使用作業系統所提供的安全性界限(例如虛擬化、容器或使用者帳戶),以最少的許可權集執行處理常式。

安全性透明度

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

使用作業系統所提供的安全性界限(例如虛擬化、容器或使用者帳戶),以最少的許可權來執行進程。

System.EnterpriseServices

System.EnterpriseServices .NET Core 和 .NET 5 + 不支援 (COM +) 。

Workflow Foundation 和 WCF

Windows.net 5 +) (包括 .net Core ()不支援 Workflow Foundation (WF) 和 Windows Communication Foundation (WCF) 。 如需替代方法,請參閱 CoreWFCoreWCF

儲存反映所產生的元件

.NET 5 + (包括 .NET Core) 不支援儲存 api 所產生的元件 System.Reflection.EmitAssemblyBuilder.Save.Net 5 + (不提供方法,包括 .Net Core) 。 此外,列舉的下欄欄位 AssemblyBuilderAccess 無法使用:

或者,請考慮使用 ILPack 程式庫

如需詳細資訊,請參閱 dotnet/runtime 問題 15704

載入多模組元件

OutputType=Module.net 5 + (中不支援包含多個模組 (MSBuild) 中的元件,包括 .net Core) 。

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

另請參閱