过时的含义



我接手了一个项目,该项目包含大量遗留代码,包括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框架

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年里已经过时了(.NET2.0于2006年问世)。为什么没有人修理这些?它们需要修理吗?当我研究GetHostByName方法时,它被GetHostEntry取代了。很简单。。。但是等一下,有很多人抱怨它与新函数不一样,也许你应该用对GetHostAddresses的调用来代替它。哦,该死。

考虑到我的解决方案中有超过28k个文件,我不确定我是否可以随意地去处理事情。有没有办法知道过时的功能将被支持多久?一旦我安装了系统,我是否应该期望这些功能能够正常工作?让代码调用过时的接口(MSDN)对系统有什么影响?

我并不是想了解如何从自己的系统中删除过时的代码,而是系统应该如何处理外部系统(例如MSDN)上过时的接口。他们显然没有遵循标记过时、替换和删除旧接口的简单循环。他们的政策是什么?MSDN定义接口的用户应该如何对过时的标记做出反应,尤其是当过时的代码没有被"苹果对苹果"等效函数替换时。

类或方法经常被标记为过时,因为它们将在下一个版本中被弃用,或者不再是执行特定任务的最有效方法。然而,为了保证向后兼容性,微软经常将这些方法保留很长一段时间。

在编程中,术语"OBSOLETE"意味着程序集/资源/函数/类型是不推荐使用的或旧的、已翻译的。这意味着编译器会注意到有更好或更新的方法可以做到这一点。示例:PHP的mysql_query()函数。

我同意以上所有答案。最重要的是,当编译器抱怨过时的方法时,我会发出警报,用SDK中提供的替代方法替换它。如果您不打算将项目升级到较新版本。NET框架,那么你就可以终生接受这个警告了。

最新更新