Recently I did some tests migrating existing sites to ASP.NET 2.0. As it turns out, not all types of code will flawlessy upgrade, because of the new dynamic compilation model. When you have plain classes (not being code behind for ASPX or ASCX etc.), they will be put in the new App_Code directory.
However, in ASP.NET 1.1, all website code, including plain classes would be compiled to a single assembly. In the new model, multiple assemblies will be generated. So in cases where your plain classes need to reference a property or something on an ASCX or ASPX this breaks, because this would result in a circular reference between assemblies in .NET, which is officially not possible.
I’ve logged this upgrade behaviour as a bug in MSDN product feedback center (FDBK23852) and we have been communicating intensively with the ASP.NET team through our TAP channels. After delevering a simple reproduction site, the ASP.NET team has proposed a workable solution to this problem. They are now considering this functionality to be added to the upgrade wizard, so that this will save a lot of people doing manual conversions. We have now delivered somewhat larger sites for them to test. I really hope things will succeed and the functionality gets added.
Go ASP.NET team!
I will post follow-ups on this topic as new information becomes known.