默认情况下,从 .NET 5 开始,启用 .NET 代码分析器规则 CA2200 。 它会针对任何重新引发异常的 catch 块生成构建警告,并在 throw 语句中显式指定该异常。
更改描述
从 .NET 5 开始,.NET SDK 包括 .NET 源代码分析器。 默认情况下会启用其中几个规则,包括 CA2200。 如果项目包含违反此规则的代码,并且配置为将警告视为错误,则此更改可能会中断生成。
规则 CA2200 标记代码,其中异常被重新引发,并且异常变量已在 throw 语句中指定。 引发异常时,它所包含的部分信息是堆栈跟踪。 堆栈跟踪是一个方法调用层次结构列表,它以引发异常的方法开头,以捕获异常的方法结尾。 如果通过在 throw 语句中指定异常来重新引发该异常,则将在当前方法处重启堆栈跟踪,并且引发该异常的原始方法与当前方法之间的方法调用的列表将丢失。 若要保留原始堆栈跟踪信息和异常信息,请在未指定异常的情况下使用 throw 语句。
以下代码片段不会为规则 CA2200 生成警告。 但是,注释行将触发冲突。
catch (ArithmeticException e)
{
// throw e;
throw;
}
已引入的版本
5.0
建议的措施
在未显式指定异常的情况下再次引发异常。 有关详细信息,请参阅 CA2200。
若要完全禁用代码分析,请在项目文件中设置为
EnableNETAnalyzersfalse。 有关详细信息,请参阅 EnableNETAnalyzers。
受影响的 API
无法通过 API 分析检测。