远程处理 API 已过时
某些与远程处理相关的 API 标记为已过时,并在编译时生成 SYSLIB0010
警告。 .NET 的未来版本中将删除这些 API。
更改描述
以下远程处理 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。 .NET 的未来版本中可能完全删除这些 API。
引入的版本
.NET 5.0
建议操作
请考虑使用 WCF 或基于 HTTP 的 REST 服务与其他应用程序的对象或跨计算机进行通信。 有关详细信息,请参阅 .NET Framework 技术在 .NET Core 上不可用。
如果必须继续使用已过时的 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)。