Recently I'm working on the stuff that upgrading a ASP.NET 1.1 project to ASP.NET 2.0(of course, I mean visual studio 2005 beta 2).
Before starting this stuff, my colleague in U.S and I both think it should be a very simple work, and I actually think it just need me to run a wizard and click some "Next" button and then we will get a new version on 2.0.
Life is not eay, really. it was bored when I found a lot of errors pop up during my compilation after upgrading even there's no any error during upgrading. You know, I cann't believe my eyes when so many errors pop up, it seems that these errors are laughing at him and tell me how stupid I am. Cruel reality.
In the next several days, I still think there will be a simply trick or simply switch somewhere I don't know, and I can quickly erase these boring errors if I know them. I cann't believe I must do some coding work after upgrading. It's unfair!
After several days' research and enduring the angry mood, at last, I give up. I acccepted the reality that the trick/switch doesn't exit, I must do some coding work for upgrading. And I want to share these experience to you:
1. The Stand Alone(SA) class in one project will be moved to the App_data directory, it's a special directory, files in this directory will belong to a new assembly, not the same assembly of current project, and ASP.NET refer the new assembly automatially so the objects in the root project directory can access the objects in App_data directory, but not reverse, so if you want to visit the objects in the root project directory from the objects in App_data directory, you must do some code work, basically you should add an abstract class(stub) in the App_data directory, the properties and methods you need to access should be defined abstractly in this abstract class, and then, the object in root dir you want to access should be changed to inherited from the new abstract class. of course, if the object in root dir is inherited from certain base class already(like System.Web.UI.Usercontrol), let the abstract class inherited from it too. OK, now you can use lay-bind technic to load the object in root dir and cast it to the abstract class type. a little complex, right? here is the example code in the object in App_code directory:
BaseClass baseClass = (BaseClass)Page.LoadControls("PageInRootDir.aspx");
2. Sometimes objects in several ascx files cann't access the objects in aspx files. I wrote a simple project in 2003, and convert it to 2005, this condition didn't happen. but in my working project it really happened. I don't know why, but I know how to fix it: it semms that these ascx files are compiled to a assembly just like the assembly with App_data dir, so what we need to do is add an interface or abstract class in one of the ascx file, and let the object what we need to visit in aspx files implement the interface or inherited form the abstract class, similiar with the first condition.
3. Is there an object its name is "Profile" in your project? It's ok in 2003, but please change its name in 2005, it seems the word is a new keyword in 2005, and if you keep it, you cann't pass the compilation.
That's it, I will be glad if my experience help you feel a little easy converting project from 1.1 to 2.0. and let me know if you have any suggestions.