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

.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 網頁伺服器是 ASP.NET Core所使用的網頁伺服器,在這裡是一個選項。 此外,請考慮針對網路型、跨電腦案例使用 System.Net.Sockets 。 稍早所述的 StreamJsonRpc 可以透過透過 Web 通訊端的 MessagePack) 通訊,用於 JSON 或二進位 (。

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

程式碼存取安全性 (CAS)

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

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

安全性透明度

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

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

System.EnterpriseServices

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

Workflow Foundation

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

提示

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

儲存反映所產生的元件

.NET 5+ (包括 .NET Core) 不支援儲存 API 所產生的 System.Reflection.Emit 元件。 方法 AssemblyBuilder.Save 不適用於 .NET 5+ (,包括 .NET Core) 。 此外,列舉的 AssemblyBuilderAccess 下欄欄位無法使用:

或者,請考慮 ILPack 程式庫

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

載入多模組元件

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

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

XSLT 腳本區塊

只有.NET Framework才支援 XSLT腳本區塊。 .NET Core 或 .NET 5 或更新版本不支援它們。

另請參閱