.NET 10弃用API完全指南:从过时框架到现代化替代方案的全面迁移手册

作者:微信公众号:【架构师老卢】
9-7 17:11
28

由于.NET 10是.NET Core系列的延续,许多在早期.NET版本(如.NET 5-9)中已弃用的.NET Framework API在.NET 10中仍然过时,并且还引入了一些新的弃用项,特别是在Windows Forms方面。

以下是根据搜索结果整理的.NET 10中已弃用功能(与.NET Framework相比)及其推荐替代方案列表:

1. Windows Forms API
已弃用API

  • Form.OnClosing(CancelEventArgs)Form.OnClosed(EventArgs)及其对应事件
  • Clipboard.GetData(String)
  • 传统控件:ContextMenuDataGridMainMenuMenuStatusBarToolBar(保留用于二进制兼容性)

替代方案

  • 使用Form.OnFormClosing(FormClosingEventArgs)Form.OnFormClosed(FormClosedEventArgs)及其事件(FormClosingFormClosed
  • Clipboard.TryGetData替换Clipboard.GetData
  • 现代替代品:ContextMenuStripDataGridViewMenuStripToolStrip

2. MAUI中的ListView
已弃用API: .NET 10 MAUI 10中的ListView及相关单元格类型(TextCellImageCellViewCell

替代方案: 使用CollectionView,支持布局、数据绑定、页眉/页脚和分组功能

3. System.Collections类型
已弃用API

  • CaseInsensitiveHashCodeProviderIHashCodeProvider
  • 使用IHashCodeProviderHashtable构造函数

替代方案

  • 使用StringComparer或基于IEqualityComparer的重载

4. 序列化与安全
已弃用API

  • BinaryFormatter(由于安全风险)
  • ExecutionEngineException(运行时不再抛出)

替代方案

  • 序列化:使用System.Text.JsonXmlSerializer
  • 用平台特定异常替换ExecutionEngineException

5. AppDomain和基于Evidence的方法
已弃用API

  • 使用Evidence参数的方法(如AppDomain.CreateInstanceActivator.CreateInstance
  • AppDomain.AppendPrivatePathSetCachePath

替代方案

  • 使用不带Evidence的重载
  • 对于路径,使用AppDomainSetup属性(如PrivateBinPathCachePath

6. Enum和String方法
已弃用API

  • Enum.ToString(IFormatProvider)(提供程序被忽略)
  • String.Copy(由于字符串不可变性而冗余)

替代方案

  • 使用Enum.ToString()Enum.ToString(String)
  • 直接赋值(如string newStr = oldStr

7. 传统COM互操作类型
已弃用APIUCOMIBindCtxUCOMIConnectionPoint及其他UCOM*类型

替代方案: 使用System.Runtime.InteropServices.ComTypes等效项(如IBindCtxIConnectionPoint

8. 已弃用的.NET Framework技术
已弃用技术: ASP.NET Web Forms、WCF、Windows Workflow Foundation (WF)

替代方案

  • Web Forms:迁移到Blazor或Razor Pages
  • WCF:使用CoreWCF或gRPC
  • WF:考虑CoreWF(社区驱动)或第三方库

9. 封送和反射
已弃用APIUnmanagedMarshalType.IsSerializable

替代方案

  • 使用MarshalAsAttribute进行封送处理
  • 对于序列化检查,依赖现代属性(如[Serializable]

10. 传统加密技术
已弃用API: 使用SHA-1指纹的X509Certificate2Collection.Find

替代方案: 使用FindByThumbprint配合HashAlgorithmName.SHA256或其他现代算法

11. AppDomain.GetCurrentThreadId()
弃用原因: 现代.NET中线程ID不稳定

替代方案: 使用Environment.CurrentManagedThreadId

12. Thread.Suspend()和Thread.Resume()
弃用原因: 危险,可能导致死锁

替代方案: 使用适当的同步机制(MonitorSemaphore、基于Task的API)

13. Thread.Abort()
弃用原因: 在.NET Core+中不可靠且不安全

替代方案: 使用协作式取消(CancellationToken

14. CodeAccessPermission和CAS(代码访问安全)
弃用原因: .NET Core中安全模型已替换

替代方案: 使用基于角色的安全或操作系统级权限

15. SoapFormatter
弃用原因BinaryFormatter和SOAP序列化不安全

替代方案: 使用System.Text.JsonXmlSerializer

16. Remoting API
弃用原因: .NET Core+不支持Remoting

替代方案: 使用gRPC、REST API或WCF(CoreWCF)

17. System.Data.OleDb
弃用原因: 传统OLE DB提供程序

替代方案: 使用Microsoft.Data.SqlClient或Entity Framework Core

18. System.Web命名空间
弃用原因: ASP.NET Web Forms已过时

替代方案: 使用ASP.NET Core(Blazor、Razor Pages、MVC)

19. System.Drawing(.NET 6+中仅限Windows)
弃用原因: 不跨平台

替代方案: 使用ImageSharpSkiaSharpMicrosoft.Maui.Graphics

20. System.Runtime.Caching(传统缓存)
弃用原因: 已被Microsoft.Extensions.Caching取代

替代方案: 使用Microsoft.Extensions.Caching中的MemoryCacheDistributedCache

21. System.Net.Mail.SmtpClient
弃用原因: 不推荐用于现代应用

替代方案: 使用MailKit(更安全且支持异步)

22. System.Data.SqlClient(传统SQL客户端)
弃用原因: 已被Microsoft.Data.SqlClient取代

替代方案: 迁移到Microsoft.Data.SqlClient

23. System.Security.Policy.Evidence
弃用原因: 传统CAS模型

替代方案: 使用现代安全模型(如ClaimsPrincipal

24. System.Diagnostics.EventLog(仅限Windows)
弃用原因: 不跨平台

替代方案: 使用ILoggerMicrosoft.Extensions.Logging)或Serilog

25. System.Workflow(Windows Workflow Foundation - WF)
弃用原因: .NET Core+不支持

替代方案: 使用CoreWF(社区移植版)或DurableTask

26. System.Transactions.TransactionScope(分布式事务)
弃用原因: .NET Core+支持有限

替代方案: 使用数据库特定事务或NServiceBus

27. System.Configuration(App.config/Web.config)
弃用原因: 已被appsettings.json取代

替代方案: 使用IConfigurationMicrosoft.Extensions.Configuration

28. System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
弃用原因: 安全风险(反序列化攻击)

替代方案: 使用System.Text.Json或Protobuf

29. System.Security.Cryptography.MD5和SHA1
弃用原因: 弱哈希算法

替代方案: 使用SHA256SHA512AesGcm

30. System.Diagnostics.PerformanceCounter(仅限Windows)
弃用原因: 不跨平台

替代方案: 使用EventCounters或OpenTelemetry

随着.NET的发展,许多来自.NET Framework的传统功能在.NET 5/6/10中变得过时。迁移的开发人员必须用现代、安全且跨平台的替代方案替换过时的API,如用System.Text.Json替换BinaryFormatter,用CancellationToken替换Thread.Abort(),用ASP.NET Core替换System.Web。升级可确保更好的性能、安全性和未来兼容性。拥抱.NET 10的改进,构建企业级应用!

相关留言评论
昵称:
邮箱:
阅读排行