Per Kevin's request, I am writing about what the App_Code folder is and what it is meant for. The origin of the App_Code folder is the fact that namespaces were effectively removed from the .NET 2.0 style of web projects. Namespaces can still be used but they were trying not to make them necessary any more. Basically, the way the App_Code folder functions is that any class that you drop in there can be accessed anywhere in the project.

In large enterprise web sites, you would probably hardly ever use the App_Code folder, because most likely you have all of your classes in another class library. For small simple sites, the App_Code folder makes a lot of sense to have a common place to put your extra classes.

If you migrate a 1.1 project, most likely you will end up with some classes in the App_Code folder (whether they are supposed to be there or not). The migration wizard basically will move any .cs or .vb (i.e.: class files), into this folder if it is not associated with a control or web page. The global.asax.cs (or .vb in the case of Marcus) will also be placed in here after a migration (in new projects when you create a global.asax it puts all the code inline in the asax file itself without a code behind).

Other files that will usually be placed there in new projects are the code behind for web services.

Lastly (as mentioned by Bobby), depending upon your compilation option, typically everthing in the App_Code folder will be compiled into a single DLL. So there you have it, the mysteries behind the App_Code folder revealed.

Read the complete post at