Анализ кода VS2005: CA1063 (вызов dispose (true) и supress finalize) - с ведением журнала

StackOverflow https://stackoverflow.com/questions/340745

Вопрос

Я пытаюсь придерживаться правил анализа кода 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

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

Это было полезно?

Решение

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

public void Dispose(bool disposing)
{
  if (disposing)
  {
     Console.WriteLine("...");
  }
  ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top