调用已弃用方法¶
ID: cs/call-to-obsolete-method
Kind: problem
Security severity:
Severity: warning
Precision: very-high
Tags:
- changeability
- maintainability
- external/cwe/cwe-477
Query suites:
- csharp-security-and-quality.qls
具有 [Obsolete]
属性的方法已弃用,不应再使用。已弃用的方法不再受支持和维护,可能无法正常工作,并且将来可能会被删除。
建议¶
将方法调用替换为对其他方法的调用。[Obsolete]
属性应建议要调用的替代方法。如果 [Obsolete]
属性未建议替代方法,则请阅读类文档和方法列表以找到合适的替代方法。
示例¶
以下示例显示了一些代码,这些代码在 Logger
类中调用了一个已弃用的方法。Log
方法具有属性 [Obsolete("Use Log(LogLevel level, string s) instead")]
,表示它已弃用。
using System;
class Bad
{
void M()
{
Logger.Log("Hello, World!");
}
static class Logger
{
[Obsolete("Use Log(LogLevel level, string s) instead")]
public static void Log(string s)
{
// ...
}
public static void Log(LogLevel level, string s)
{
// ...
}
}
enum LogLevel
{
Info,
Warning,
Error
}
}
按照属性的建议,通过调用 Logger
类中的其他方法来修复代码。
using System;
class Good
{
void M()
{
Logger.Log(LogLevel.Info, "Hello, World!");
}
static class Logger
{
[Obsolete("Use Log(LogLevel level, string s) instead")]
public static void Log(string s)
{
// ...
}
public static void Log(LogLevel level, string s)
{
// ...
}
}
enum LogLevel
{
Info,
Warning,
Error
}
}
参考¶
MSDN:ObsoleteAttribute 类。
常见弱点枚举:CWE-477。