遠端處理 API 已過時

某些遠端相關 API 會標示為過時,並在編譯時間產生 SYSLIB0010 警告。 這些 API 可能會在 .NET 的未來版本中移除。

變更描述

下列遠端 API 標示為已淘汰。

API 標示為已淘汰...
MarshalByRefObject.GetLifetimeService() 5.0 RC1
MarshalByRefObject.InitializeLifetimeService() 5.0 RC1

在 .NET Framework 2.x - 4.x 中,GetLifetimeService()InitializeLifetimeService() 方法可控制與 .NET 遠端處理相關的執行個體的存留期。 在 .NET Core 2.x- 3.x 中,這些方法一律會在執行階段擲回 PlatformNotSupportedException

在 .NET 5 和更新版本中,GetLifetimeService()InitializeLifetimeService() 方法會標示已淘汰作為警告,但會繼續在執行階段擲回 PlatformNotSupportedException

// MemoryStream, like all Stream instances, subclasses MarshalByRefObject.
MemoryStream stream = new MemoryStream();
// Throws PlatformNotSupportedException; also produces warning SYSLIB0010.
obj.InitializeLifetimeService();

此變更僅限編譯時期。 舊版 .NET Core 沒有執行階段變更。

變更原因

.NET 遠端處理為舊技術。 這項技術可在另一個處理序中 (甚至可能在不同電腦上) 具現化物件,並與該物件互動,如同一般同處理序的 .NET 物件執行個體。 .NET 遠端處理基礎結構只存在於 .NET Framework 2.x - 4.x 中。 .NET Core 及 .NET 5 和更新版本不支援 .NET 遠端處理,且遠端 API 不存在,或者一律會在這些執行階段擲回例外狀況。

為協助開發人員避開這些 API,我們會淘汰特定遠端相關 API。 這些 API 可能會在 .NET 的未來版本中完全移除。

導入的版本

.NET 5.0

  • 請考慮使用 WCF 或以 HTTP 為基礎的 REST 服務,以便與其他應用程式或跨電腦的物件進行通訊。 如需詳細資訊,請參閱 .NET Core 上無法使用的 .NET Framework 技術

  • 若您必須繼續使用已淘汰的 API,則可在程式碼中隱藏 SYSLIB0010 警告。

    MarshalByRefObject obj = GetMarshalByRefObj();
    #pragma warning disable SYSLIB0010 // Disable the warning.
    obj.InitializeLifetimeService(); // Still throws PNSE.
    obj.GetLifetimeService(); // Still throws PNSE.
    #pragma warning restore SYSLIB0010 // Reenable the warning.
    

    您也可隱藏專案檔中的警告,如此會停用專案中所有來源檔案的警告。

    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
       <TargetFramework>net5.0</TargetFramework>
       <!-- NoWarn below will suppress SYSLIB0010 project-wide -->
       <NoWarn>$(NoWarn);SYSLIB0010</NoWarn>
      </PropertyGroup>
    </Project>
    

    隱藏 SYSLIB0010 只會停用遠端 API 過時警告, 而不會停用其他任何警告。 此外,該動作也不會變更一律擲回 PlatformNotSupportedException 的硬式編碼執行階段行為。

受影響的 API