CA2000:Microsoft.Reliability 对象未沿所有异常路径进行处理
Posted
技术标签:
【中文标题】CA2000:Microsoft.Reliability 对象未沿所有异常路径进行处理【英文标题】:CA2000 : Microsoft.Reliability object is not disposed along all exception paths 【发布时间】:2012-02-09 08:55:28 【问题描述】:我在以下方法中遇到代码分析错误。
public static OracleCommand CreateStoredProcedureCommand(string name,
OracleConnection connection)
return new OracleCommand(name, connection) CommandType = CommandType.StoredProcedure ;
CA2000:Microsoft.Reliability:方法中 'StoredProcedureHelper.CreateStoredProcedureCommand(字符串, OracleConnection)', 对象'command' 并没有被处理 异常路径。在对象“命令”上调用 System.IDisposable.Dispose 在所有对它的引用都超出范围之前
如何在不抑制的情况下解决这个问题?
【问题讨论】:
【参考方案1】:当对属性的赋值引发异常时,对象未被释放。试试这个:
public static OracleCommand CreateStoredProcedureCommand(string name,
OracleConnection connection)
OracleCommand result = new OracleCommand(name, connection);
try
result.CommandType = CommandType.StoredProcedure;
return result;
catch
result.Dispose();
throw;
【讨论】:
【参考方案2】:从方法上看,处理对象的责任不能总是由调用者承担。
你必须压制它。
【讨论】:
正如 Henrik 所说,属性设置器有可能抛出异常而使对象未处理。以上是关于CA2000:Microsoft.Reliability 对象未沿所有异常路径进行处理的主要内容,如果未能解决你的问题,请参考以下文章
为啥 FxCop 不报告 CA2000 对于这种未处置的类实例的琐碎情况?
代码分析警告 CA2000:在对象“new ContainerControlledLifetimeManager()”上调用 Dispose