2

我正在尝试遵守新项目的 VS2005 代码分析规则。我有这个方法:

public void Dispose()
{
    Console.WriteLine("Dispose() called");
    Dispose( true );
    GC.SuppressFinalize(this);
}

(控制台调用将在某个时候变成 log4net 调用,我们总是对记录某些类型的 dispose 感兴趣)。

控制台调试行的存在会触发此错误:

错误 1 ​​CA1063:Microsoft.Design:修改 PerfectDisposableClass.Dispose():Void 使其调用 Dispose(true),然后在当前对象实例(VB 中的“this”或“Me”)上调用 GC.SuppressFinalize,然后返回. F:\Visual Studio 2005\Projects\DisposeAndFinalize\DisposeAndFinalize\PerfectDisposableClass.cs 26 DisposeAndFinalize

如果不求助于 pragma 指令,有没有办法解决这个问题?也许写我自己的规则?另外,我可以用反射器查看组件中的现有规则吗?

4

1 回答 1

3

您可以将 log 语句放在 Dispose(bool disposing) 方法中以保持在准则范围内:

public void Dispose(bool disposing)
{
  if (disposing)
  {
     Console.WriteLine("...");
  }
  ...
}
于 2008-12-04T14:31:40.137 回答