由于.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)ContextMenu、DataGrid、MainMenu、Menu、StatusBar、ToolBar(保留用于二进制兼容性)替代方案:
Form.OnFormClosing(FormClosingEventArgs)、Form.OnFormClosed(FormClosedEventArgs)及其事件(FormClosing、FormClosed)Clipboard.TryGetData替换Clipboard.GetDataContextMenuStrip、DataGridView、MenuStrip、ToolStrip等2. MAUI中的ListView
已弃用API:
.NET 10 MAUI 10中的ListView及相关单元格类型(TextCell、ImageCell、ViewCell)
替代方案:
使用CollectionView,支持布局、数据绑定、页眉/页脚和分组功能
3. System.Collections类型
已弃用API:
CaseInsensitiveHashCodeProvider、IHashCodeProviderIHashCodeProvider的Hashtable构造函数替代方案:
StringComparer或基于IEqualityComparer的重载4. 序列化与安全
已弃用API:
BinaryFormatter(由于安全风险)ExecutionEngineException(运行时不再抛出)替代方案:
System.Text.Json或XmlSerializerExecutionEngineException5. AppDomain和基于Evidence的方法
已弃用API:
AppDomain.CreateInstance、Activator.CreateInstance)AppDomain.AppendPrivatePath、SetCachePath替代方案:
AppDomainSetup属性(如PrivateBinPath、CachePath)6. Enum和String方法
已弃用API:
Enum.ToString(IFormatProvider)(提供程序被忽略)String.Copy(由于字符串不可变性而冗余)替代方案:
Enum.ToString()或Enum.ToString(String)string newStr = oldStr)7. 传统COM互操作类型
已弃用API:
UCOMIBindCtx、UCOMIConnectionPoint及其他UCOM*类型
替代方案:
使用System.Runtime.InteropServices.ComTypes等效项(如IBindCtx、IConnectionPoint)
8. 已弃用的.NET Framework技术
已弃用技术:
ASP.NET Web Forms、WCF、Windows Workflow Foundation (WF)
替代方案:
9. 封送和反射
已弃用API:
UnmanagedMarshal、Type.IsSerializable
替代方案:
MarshalAsAttribute进行封送处理[Serializable])10. 传统加密技术
已弃用API:
使用SHA-1指纹的X509Certificate2Collection.Find
替代方案:
使用FindByThumbprint配合HashAlgorithmName.SHA256或其他现代算法
11. AppDomain.GetCurrentThreadId()
弃用原因:
现代.NET中线程ID不稳定
替代方案:
使用Environment.CurrentManagedThreadId
12. Thread.Suspend()和Thread.Resume()
弃用原因:
危险,可能导致死锁
替代方案:
使用适当的同步机制(Monitor、Semaphore、基于Task的API)
13. Thread.Abort()
弃用原因:
在.NET Core+中不可靠且不安全
替代方案:
使用协作式取消(CancellationToken)
14. CodeAccessPermission和CAS(代码访问安全)
弃用原因:
.NET Core中安全模型已替换
替代方案: 使用基于角色的安全或操作系统级权限
15. SoapFormatter
弃用原因:
BinaryFormatter和SOAP序列化不安全
替代方案:
使用System.Text.Json或XmlSerializer
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)
弃用原因:
不跨平台
替代方案:
使用ImageSharp、SkiaSharp或Microsoft.Maui.Graphics
20. System.Runtime.Caching(传统缓存)
弃用原因:
已被Microsoft.Extensions.Caching取代
替代方案:
使用Microsoft.Extensions.Caching中的MemoryCache或DistributedCache
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)
弃用原因:
不跨平台
替代方案:
使用ILogger(Microsoft.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取代
替代方案:
使用IConfiguration(Microsoft.Extensions.Configuration)
28. System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
弃用原因:
安全风险(反序列化攻击)
替代方案:
使用System.Text.Json或Protobuf
29. System.Security.Cryptography.MD5和SHA1
弃用原因:
弱哈希算法
替代方案:
使用SHA256、SHA512或AesGcm
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的改进,构建企业级应用!