Using Objects Comparer to Compare Complex Objects in C#

It is a common situation that complex objects need to be compared. Sometimes objects can contain nested elements, or some members should be excluded from the comparison (auto-generated identifiers, create/update date etc.), or some members can have custom comparison rules (same data in different formats, like phone numbers). This small framework was developed to solve these kinds of problems.
Briefly, Objects Comparer is an object-to-object comparer, which allows the developer to compare objects recursively, member-by-member, and define custom comparison rules for certain properties, fields, or types.