Анализ кода VS2005: CA1063 (вызов dispose (true) и supress finalize) - с ведением журнала - PullRequest
2 голосов
/ 04 декабря 2008

Я пытаюсь придерживаться правил анализа кода VS2005 для нового проекта. У меня есть этот метод:

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

(В какой-то момент консольный вызов станет вызовом log4net, и мы всегда заинтересованы в удалении журналов для некоторых наших типов).

Присутствие строки отладки консоли вызывает эту ошибку:

Ошибка 1 CA1063: Microsoft.Design: Изменить PerfectDisposableClass.Dispose (): Void так, что он вызывает Dispose (true), затем вызывает GC.SuppressFinalize для текущего экземпляра объекта ('this' или 'Me' в VB), а затем возвращается. F: \ Visual Studio 2005 \ Projects \ DisposeAndFinalize \ DisposeAndFinalize \ PerfectDisposableClass.cs 26 DisposeAndFinalize

Не прибегая к прагматическим директивам, есть ли способ обойти это? Возможно, написание моих собственных правил? Кроме того, есть ли существующие правила в сборке, где я могу посмотреть с отражателем?

1 Ответ

3 голосов
/ 04 декабря 2008

Вы можете поместить инструкцию log в метод Dispose (bool dispose), чтобы соответствовать рекомендациям:

public void Dispose(bool disposing)
{
  if (disposing)
  {
     Console.WriteLine("...");
  }
  ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...