Visual Studio Web Projects
Created: 3 January 2009
Contents
- Web Applications
- Web Sites
- Web Deployment Projects
- Feature Comparison
One of the biggest confusions in the ASP.NET world is that of web project type.
Visual Studio (VS) supports two web project types: web sites and web applications.
Unfortunately, they are different enough that it is important to understand
which type you are using and why. In this article we will discuss the
differences between the two types by looking at their history. By the end
of the article you should be comfortable enough to determine which type is best
for you.
Web Application
When Visual Studio .NET (VS.NET) was released it supported a single web project
type, the web application. A web application looks and acts like a regular
Windows or console application. A web application contains a set of project
property pages which the developer can set including build and debugging
options. This allows, for example, the developer to generate documentation
for any code contained in the project.
When a web application is compiled all the source files (including
the codebehind files) are compiled into a single assembly and stored in the Bin
directory. The ASPX files are deployed with the binaries. At runtime the ASP.NET
runtime compiles the ASPX files into an assembly when they are first
needed. If an ASPX file ever changed then a new assembly is generated.
The initial version of .NET did not support dynamic code generation like it does
now so the performance overhead was a little high when recompilation occurred.
As of v2.0 ASP.NET compiles the ASPX files differently to reduce performance hit
and to optimize memory.
The fact that web applications work similarly to other project types is also one
of its greatest disadvantages. A web application has to be deployed as one
entity. If different parts of the application are managed by different
teams then some repository is needed to allow changes to be consolidated and
deployment to occur. This infrastructure also slows down the rate of the
site changes.
Web applications are designed for projects where the entire site is a single
entity. Any changes to the project requires redeployment. Multiple
teams must synchronize their code before a build can occur. The
application code itself is protected from prying eyes when it is compiled into
an assembly.
Web Sites
When Visual Studio 2005 (VS2005) was released Microsoft removed the web
application project type and replaced it with a web site. Somebody at MS
dropped the ball here because these project types are completely different.
A web site project is more ideally suited for intranet sites where separate
teams are responsible for different areas of the site. In an intranet
environment the safety of the source code isn't as important as a fast
turnaround time.
In a web site project almost all the project settings are either removed or
stored in the application configuration file. Options like whether to
generate documentation files or do code analysis simply don't exist in web
sites. This fits in with the web site philosophy of compile as needed.
Only code
residing in the App_Code directory is compiled down into an assembly at build
time. The
remaining code becomes deployment items along with the ASPX files. This
has advantages and disadvantages. Making changes to a web site requires
that you merely replace the corresponding source or ASPX files. The
ASP.NET runtime will recompile the code as needed. The turn around is
therefore high. Pushing most of the project settings to the configuration
file also means that upgrading to newer components or tweaking build settings
requires a simple change to the config file rather than compilation and
redeployment.
Perhaps the biggest weakness of the web site project type is that the source code
is visible and changeable to the outside world. Outside world, here,
meaning anyone with file access to the web directory. IIS prevents web
access to the source and configuration files. Another issue is
performance. As files change recompilation has to occur. ASP.NET
only does this when a page is first referenced so viewing a page is noticeably
slower the first time after a refresh.
After the VS2005 release there was an uproar in the community about the
new web site project. It wasn't that nobody liked it but rather many
people didn't want to be forced to use the new model, especially since it didn't
fit in with many application models. MS remedied the situation by shipping
an addin that would add the web application project type back in. In
VS2005 SP1 web applications were formally added back into the VS project list.
Web Deployment Projects
One area that neither type of web project covers is the compilation of ASPX
files to assemblies. In the initial release each ASPX file resulted in a
separate assembly. This was great for ASPX files that changed a lot but
bad for performance as each page was compiled, not to mention the number of
assemblies generated.
After VS2005 was released MS released the Web Deployment Project (WDP) addin (here).
This addin exposed some new options for controlling how web sites were deployed.
Rather than compiling the ASPX files when they are needed the addin allows for
precompilation of the site to speed things up. This has no impact on the
site behavior because if an ASPX file changes then a recompilation will occur
anyway. The benefit of this approach is that the initial load of the site
will be fast since the ASPX files are already compiled.
Another area where the addin is useful is controlling how the site is compiled.
The addin allows: all the ASPX files in the site, all the ASPX files in a
directory or each individual ASPX file to be compiled into separate assemblies.
The best choice depends upon the site in question. The more ASPX files you
combine into a single assembly the better the performance and memory usage will
be but at the cost of more overhead when any of the files change.
The addin supports several additional features that makes it worthwhile if you
are managing a web project. I recommend that you take a look at it.
The multiple configuration file support is especially intereseting although it
was difficult to use in the initial release.
The addin technically doesn't do a lot on its own. Instead it relies on a
couple of ASP.NET tools that ship with .NET: aspnet_compiler and aspnet_merge.
(aspnet_compiler is
responsible for compiling the ASPX files. It is used to for precompilation
and to control whether ASPX files can be updated after deployment. Refer
to MSDN for full documentation.
aspnet_merge works in conjunction with aspnet_compiler to merge the various ASPX
assemblies into a new assembly or set of assemblies. It also is
responsible for determining what gets combined and what remains separated.
Refer to MSDN for full documentation if you are interested. It is probably
just better to use WDP instead.
Feature Comparison
We will now compare the two web project types so that you can make a more
informed decision.
Web Applications
Advantages
- Ideally suited for web projects that have little or no changes over time and in
cases where the project code is proprietary. Applications that use a web
front end are good examples.
- Standard project settings are available so a developer can configure the
application.
- Since most of the code is pre-compiled the application performance is good.
- Deployment involves copying the ASPX files and the Bin directory.
Disadvantages
- Other than minor UI changes any application changes require recompilation and
redeployment.
- Upgrading to newer third-party components requires recompilation and
redeployment.
- Turn around time for changes can be long depending on deployment process.
- Sites where different teams are responsible for the content are harder to
synchronize.
Web Sites
Advantages
- Faster turnaround for code and UI changes.
- Multiple teams can be working on different areas of the same site without
compilation or deployment issues.
- Configuration and dependency changes can occur with a configuration file change.
Disadvantages
- Page loading is slower after any changes are made.
- Source code is visible to anyone with file system access.
- Deployment requires shipping the ASPX files, Bin directory and source files.
|