某些远程处理相关的 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 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 的硬编码运行时行为。