Brad Abrams has a great download on Breaking Changes in a Managed World:
One of the more valuable resources we use internally is a formal definition of what a “breaking change” is. That is what are the rules team “A” should follow such that new builds of their library don’t break all their clients. Some things are obvious “don’t remove any public methods” but some are subtle such as “don’t change return types of public methods”.
Breaking Changes in a Managed World