Dispose を明示的に呼び出していない呼び出し元を見つけるために、デバッグ プロセッサでファイナライザーを定義するのが正しいアプローチであるかどうか (すべてのリソースは管理されたリソースであるため、実際には必要ありません) かどうか疑問に思っています。その場合、ファイナライザーが呼び出され、Debug.Fail メッセージが発生します。
Public class Foo: IDisposable
{
      ...
    public void Dispose()
    {
      Dispose(true);
      #if DEBUG         
      GC.SuppressFinalization();
      #endif
    }
    protected virtual void Dispose(bool disposing_)
    {
      if (disposing_)
      {
         // Unsubscribe from any event handlers, etc.
      }
    }
    #if DEBUG
    ~ Foo()
    {
      Dispose(false);
      Debug.Fail("Dispose was not invoked by caller"); // <--
    }
    #endif
}