过时的含义

时间:2015-04-21 19:06:59

标签: c# c++ .net visual-studio-2010 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

这是什么意思?功能显然仍然是定义的,或者它们不会编译或者会给我某种“未找到”的功能。或者'未定义'错误。实施是否缺失?这些功能是否仍然有用(以及以前)?

几个我抬头看了很长时间他们已经过时了。例如,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调用替换它。好吧,dang。

鉴于我在我的解决方案中获得了超过28k的文件,我不确定我是否可以直截了当地搞乱这些事情。有没有办法知道将支持多长时间的功能?一旦我安装了系统,我是否应该期望它们能够正常工作?让代码调用过时接口(MSDN)会对系统产生什么影响?

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

3 个答案:

答案 0 :(得分:8)

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

答案 1 :(得分:2)

在编程术语' OBSOLETE'意味着程序集/资源/功能/类型已弃用或旧,翻译它意味着编译器会注意到有更好或更新的方法。示例:PHP的mysql_query()函数。

答案 2 :(得分:0)

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