我已经接管了一个项目,该项目包含很多旧代码,包括C++和C#,目前在VS 2010下(在Windows 7上)进行编译。

当我构建解决方案时,令人惊讶的是,成功构建了143个项目。但是,有大量警告提示。其中令人惊讶的数量是关于过时功能的警告。

warning CS0618: 'System.Runtime.InteropServices.UCOMIMoniker' is obsolete
warning CS0618: 'System.Runtime.InteropServices.UCOMIEnumMoniker' is obsolete
warning CS0618: 'System.Runtime.InteropServices.UCOMIRunningObjectTable' is obsolete
warning CS0618: 'System.Runtime.InteropServices.UCOMIRunningObjectTable' is obsolete
warning CS0618: 'System.Runtime.InteropServices.UCOMIBindCtx' is obsolete
warning CS0618: 'System.IO.Path.InvalidPathChars' is obsolete
warning CS0618: 'System.Configuration.ConfigurationSettings.AppSettings' is obsolete
warning CS0618: 'System.Net.Dns.GetHostByName(string)' is obsolete

这是什么意思?这些函数显然仍处于定义状态,否则将无法编译,或者给我某种“未找到”或“未定义”的错误。缺少实现吗?这些功能是否仍然有效(和以前一样)?

我查了几个,他们已经很长一段时间已经过时了。例如,GetHostByName:

.NET Framework
Supported in: 1.1
Obsolete (compiler warning) in 4.6
Obsolete (compiler warning) in 4.6
Obsolete (compiler warning) in 4.5
Obsolete (compiler warning) in 4.5.1
Obsolete (compiler warning) in 4.5.2
Obsolete (compiler warning) in 4
Obsolete (compiler warning) in 3.5
Obsolete (compiler warning) in 3.5 SP1
Obsolete (compiler warning) in 3.0
Obsolete (compiler warning) in 3.0 SP1
Obsolete (compiler warning) in 3.0 SP2
Obsolete (compiler warning) in 2.0
Obsolete (compiler warning) in 2.0 SP1
Obsolete (compiler warning) in 2.0 SP2

如果我理解这一权利,它在过去8-9年中已经过时(.NET 2.0于2006年问世)。为什么没有人修复这些?是否需要修复?当我研究该GetHostByName方法时,将其替换为GetHostEntry。足够简单...但是,请耐心等待,很多人抱怨它与新功能不兼容,也许您应该用调用GetHostAddresses代替它。好吧,党

鉴于我的解决方案中有超过28k个文件,所以我不确定我是否可以随意处理那些麻烦的事情。有没有办法知道过时的功能将支持多长时间?我应该期望这些在安装系统后甚至可以使用吗?使代码调用过时的接口(interface)(MSDN)会对系统产生什么影响?

我不是要了解如何从自己的系统中删除过时的代码,而是要了解系统应该如何处理外部系统(例如MSDN)上过时的接口(interface)。显然,它们并没有遵循标记为过时,替换和删除旧接口(interface)的简单循环。他们有什么政策? MSDN定义的接口(interface)的用户应如何应对过时的标记,尤其是当过时的代码未替换为“从苹果到苹果”的等效功能时。

最佳答案

通常,类或方法被标记为过时的,因为它们将在下一个版本中弃用,或者不再是完成某项任务的最有效方法。但是,Microsoft经常离开这些方法很长时间以保证向后兼容。

07-24 09:44
查看更多