When using the VS 2005 Web Site Project model, you can
significantly improve build performance times by following these steps:
1) Verify that you are not suffering from an issue I call
"Dueling Assembly References". I describe how to both detect
and fix this condition in this blog post. If you are ever doing a build and see
the compilation appear to pause in the "Validating Web Site" phase of
compilation (meaning no output occurs in the output window for more than a few
seconds), then it is likely that you are running into this problem. Use
the techniques outlined in this blog post to fix it.
2) Keep the number of files in your /app_code directory
small. If you end up having a lot of class files within this
directory, I'd recommend you instead add a separate class library project to
your VS solution and move these classes within that instead since class
library projects compile faster than compiling classes in the /app_code
directory. This isn't usually an issue if you just have a small number of
files in /app_code, but if you have lots of directories or dozens of files you
will be able to get speed improvements by moving these files into a separate
class library project and then reference that project from your web-site
instead. One other thing to be aware of is that whenever you switch from
source to design-view within the VS HTML designer, the designer causes the
/app_code directory to be compiled before the designer surface loads. The
reason for this is so that you can host controls defined within /app_code in
the designer. If you don't have an /app_code directory, or only have a
few files defined within it, the page designer will be able to load much
quicker (since it doesn't need to perform a big compilation first).
3) Enable the on-demand compilation option for
your web-site projects. To enable this, right-click on your web-site
project and pull up the project properties page. Click the
"Build" tab on the left to pull up its build settings. Within
the "Build" tab settings page change the F5 Start Action from
"Build Web Site" to either the "Build Page" or
"No Build" option. Then make sure to uncheck the "Build
Web site as part of solution" checkbox:
Figure 2
When you click ok to accept these changes you
will be running in an on-demand compilation mode. What this
means (when you select the "Build Page" option in the dialog above)
is that when you edit a page and then hit F5 (run with debugging) or
Ctrl-F5 (run without debugging) the solution will compile all of the class
library projects like before, then compile the /app_code directory and
Global.asax file, and then instead of re-verifying all pages within the
web-site it will only verify the current page you are working on, and any user
controls that the page references. With large (and even medium) projects
with lots of pages, this can obviously lead to major performance wins.
Note that ASP.NET will automatically re-compile any other page or control you
access at runtime -- so you will always have an up-to-date and current running
application (you don't need to worry about old code running). You can
optionally also use the "No Build" option to by-pass page-level
validation in the IDE, which obviously speeds up the entire process much further
(I'd recommend giving both options a try to see which you prefer).
By deselecting the "Build Web site as
part of solution" checkbox, you will find that the Ctrl-Shift-B keystroke
(which builds the solution) will continue compiling all class library
projects, but will not re-build all pages within your web-site project.
You will still get full intellisense support in your pages in this scenario -
so you won't lose any design-time support. You will also continue to get
warning/error squiggles in code/class when they are open. If you want a
way to force a re-build to occur on pages not open, or across all pages within
the web-site, you can use the "Build Page" or "Build Web
Site" menu options within the "Build" menu of Visual Studio:
Figure 3
This gives you control as to which pages on
your site you want to verify (and when) - and can significantly improve build
performance. One trick I recommend doing is adding a new shortcut
keystroke to your environment to allow you to quickly short-cut the "Build
Page" menu option to avoid you having to ever use a mouse/menu for
this. You can do this by selecting the Tools->Customize menu item, and
then click the "Keyboards" button on the bottom-left of the customize
dialog. This will bring up a dialog box that allows you to select the VS
Build.BuildPage command and associate it within any keystroke you want:
Figure 4
Once you do this, you can type "Ctrl-Shift-P" (or
any other keystroke you set) on any page to cause VS to compile any
modified class library project (effectively the same thing that Ctrl-Shift-B
does), then verify all classes within the /app_code directory, and then
re-build just the page or user control (and any referenced master pages or user
controls it uses) that you are working on within the project.
Once the above steps are applied, you should find that your
build performance and flexibility is much improved - and that you have complete
control over builds happen.