Usually not calling Dispose indicates a possible error or sloppy code and may lead to some hard to find bugs. Ideally I would like to spot if Disposed was not called during unit tests.
One of the methods we used was to put Debug.Assert in the Finalizer
#if DEBUG
~MyClass()
{
Debug.Assert(false, “MyClass.Dispose() was not called”);
}
#endif
And we found ourselves clicking through assert message boxes but it didn’t work well with continuous integration builds that would ignore the popups.