过时的意思

The meaning of obsolete

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

这是什么意思?这些函数显然仍然被定义,否则它们将无法编译或给我某种 'not found' 或 'not defined' 错误。是否缺少实施?这些功能是否仍然有效(和以前一样)?

有几个我查过,它们已经过时很久了。例如,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 个文件,我不确定我是否可以随便乱搞。有没有办法知道过时的功能将支持多长时间?我是否应该期望这些在我安装系统后还能工作?让代码调用过时接口 (MSDN) 对系统有何影响?

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

在编程中,术语 'OBSOLETE' 表示 assembly/resource/function/type 已弃用或过时,翻译后表示编译器注意到您有更好或更新的方法来完成它。示例:PHP 的 mysql_query() 函数。

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

我同意以上所有答案。我最重要的建议是,当编译器抱怨过时的方法是一个警报,可以继续并用 SDK 中提供的替代方法替换它。如果您不打算将您的项目升级到更新的 .NET 框架,那么您可以终生接受此警告。