I would like to suggest that there is something wrong with the logic of the designers relating to this issue. I spent several hours trying to trace just three instances of the error discussed in this thread, and feel very frustrated by that wasted effort because I do not think there is anything wrong with the structure I had in place for my web application.
I always try to take a modular approach to my development and create features in a way that can be re-used, even if it is not practical to put them in a component such as a server control.
I wanted to add a News module to my web app, which included support for Newsletters. Thinking this could be used elsewhere I started out adding a folder "News" to my web project, in which I would create all of the pages and user controls I had in mind. I always put my Master Pages in a folder called MasterPages (strangely enough) so I had the following structure
MasterPages
TwoColumn.master
ThreeColumn.master
News
NewsManager.aspx
NewsLetterManager.aspx
NewsReader.aspx
NewsPanel.ascx
Wanting to have a rotating news panel in the left column of every page on my site I added a reference for NewsPanel.ascx to both master pages. All of the pages in the News folder reference the TwoColumn.master master page, so on building the site I got the circular reference errors.
To resolve it I moved my NewsPanel.ascx user control to another folder (UserControls). My original plan was for a simple copy of a single folder to deploy the News module to another application, which I think is a perfectly reasonable expectation, but now that this problem has materialised I cannot do that without having to use methods/configurations that are not best practice and sacrifice performance, and I don't understand the logic of designing a product with these limitations.
I appreciate that templates are being shipped that address these issues, but question why they are there in the first place. IMHO it should be an obvious requirement that MasterPages can reference any user control from anywhere in the application hierarchy, and any page anywhere in the hierarchy should be able to reference any master page. Therefore the default compilation mode should have permitted this, instead of us having to work around the issue.