ASP.NET Compilation Models
- ASP.NET Compilation
- Automating aspnet_compiler.exe in Visual Web Developer Express Edition
In This Chapter
- ASP.NET Compilation
- Automating aspnet_compiler.exe in Visual Web Developer Express Edition
ASP.NET Compilation
In the previous chapter, I covered the basics of ASP.NET code models. In this chapter, we'll discuss the details of how ASP.NET applications are compiled. This information is not vital to your success as an ASP.NET developer, but having an understanding of the architecture of your development environment always makes you a better developer.
ASP.NET is nothing like the legacy ASP with which many developers are familiar. You develop ASP pages by using VBScript or JScript, and they are interpreted, meaning that they are executed just as they are written, directly from the page. ASP.NET is entirely different in that ASP.NET pages are compiled before they are executed.
When you write ASP.NET code, you do so in human-readable text. Before ASP.NET can run your code, it has to convert it into something that the computer can understand and execute. The process of converting code from what a programmer types into what a computer can actually execute is called compilation.
Exactly how compilation takes place in ASP.NET depends on the compilation model that you use. Several different compilation models are available to you in ASP.NET 3.5.
The Web Application Compilation Model
The web application compilation model is the same model provided in ASP.NET 1.0 and 1.1. When you use this model, you use the Build menu in Visual Web Developer to compile your application into a single DLL file that is copied to a bin folder in the root of your application. When the first request comes into your application, the DLL from the bin folder is copied to the Temporary ASP.NET Files folder, where it is then recompiled into code that the operating system can execute in a process known as just-in-time (JIT) compilation. The JIT compilation causes a delay of several seconds on the first request of the application.
To create a new ASP.NET web application using the web application compilation model, select File, New Project, and then choose the ASP.NET Web Application template as shown in Figure 3.1.
Figure 3.1 Choose the New Project option on the File menu to create a new ASP.NET application that uses the web application compilation model.
The Website Compilation Model
The website compilation model is the model that developers using Visual Web Developer Express Edition will use because it's the only model available. In this model, all files in the application are copied to the remote web server and are then compiled on the fly by ASP.NET at browse time.
→ |
For more information on inline code and code-behind code models, see "Server-Side Code Models," p. 24. |
When this compilation model is used, ASP.NET compiles the application into one or more DLLs in the Temporary ASP.NET Files folder when the first page is requested. The DLLs are in a subfolder with a name derived from a special naming convention that allows for dynamic and random directory names. Therefore, a website called MyWebSite might execute from a folder on the server that looks similar to this:
C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\MyWebSite\650b10f9\e47ff097
Inside that folder will be the actual DLLs that contain the compiled code. The naming convention of the DLLs is App_Web_<random_name>.dll.
The website compilation model is convenient because developers can open a code file or an ASPX page and make modifications to it on the live server. When those changes are saved, they go into effect immediately. However, using this method requires you to copy all the source code for your application to the live server, and this may be a concern to some developers.
The Precompilation Model
The precompilation model allows you to compile your ASP.NET application into one or more DLLs that can then be copied to the web server in place of any code.
Select Build, Publish Web Site to precompile your website using the Publish Web Site dialog shown in Figure 3.2.
Figure 3.2 The Publish Web Site dialog makes precompiling a website simple.
If you'd like the option of updating any of your ASPX pages on the live server (for example, making a change to the HTML code), you should check the Allow This Precompiled Site to be Updatable check box. If your site is precompiled with this check box checked, you'll then be able to make modifications to the ASPX pages on the live server if necessary. If it is unchecked, you'll still need to copy the ASPX files to the server, but the precompilation process will remove all the code from them, so you won't be able to change any of them on the live server. We'll talk about that in greater detail a little later in this chapter.
If you are using Visual Web Developer Express Edition, you won't have the option to precompile your website within the user interface, but it can still be accomplished if you use the aspnet_compiler.exe utility that ships with the .NET Framework.
The aspnet_compiler.exe utility runs from a command line. If you have the .NET Framework SDK v2.0 installed, you can select Start, All Programs, Microsoft.NET Framework SDK v2.0 and then click SDK Command Prompt to open a command prompt. This command prompt automatically sets the necessary environment variables to enable you to run aspnet_compiler.exe without changing into the v2.0.50727 directory.
If you don't have the .NET Framework SDK v2.0 installed, you can still run aspnet_compiler.exe from a regular command line, but you need to change into the v2.0.50727 directory first. You can do that by running the following command from a command prompt:
cd \windows\microsoft.net\framework\v2.0.50727
→ |
For information on how to configure a menu item in Visual Web Developer Express Edition that will precompile your web application, see "Automating aspnet_compiler.exe in Visual Web Developer Express Edition," later in this chapter. |
Numerous command-line parameters can be used with aspnet_compiler.exe. Table 3.1 lists a few that you are likely to use often.
Table 3.1. Frequently Used Parameters for aspnet_compiler.exe
Parameter |
Description |
-? |
Prints a description of all parameters. |
-v |
Specifies the path that follows is a virtual path. |
-p |
The physical path of the application to compile. |
-u |
Specifies the compiled application can be updated. |
-c |
Causes the compiled application to be fully rebuilt, overwriting any existing files. |
-d |
Creates debug output, making the application easier to debug if a problem arises after it's copied. |
Even though there are a lot of parameters for aspnet_compiler.exe, the command to precompile your ASP.NET application is less complex than you might think. For example, if you have an ASP.NET application located at c:\myApp and you want to precompile it and save the result to c:\compiledApp, you would run the following command:
aspnet_compiler.exe -p "c:\myApp" -v / "c:\compiledApp"
The -p parameter is used to point to the location of the application (c:\myApp in this case), and the -v parameter points to the virtual location of the application. In a file-based ASP.NET application, the virtual location is always /. That is followed by the path where the compiled files should be written.
If you look in the c:\compiledApp directory after this command runs, you can see what looks like the ASPX files for your application, but in fact, these are simply marker files. If you open one of them, you'll see a single line of text in it that says This is a marker file generated by the precompilation tool, and should not be deleted! ASP.NET creates this file so that, when the application is browsed on the live server, users won't get an error saying that the file wasn't found.
You'll also see a file called preCompiledApp.config. This file contains the version number of the precompilation tool (for ASP.NET 3.5, it is version 2) and specifies whether the site is capable of being updated. If your website has any other configuration files (such as a web.config file), it is also in the directory containing the precompiled application, along with any other supporting files and folders such as images and so on.
→ |
For more information on web.config files, see Chapter 6, "ASP.NET Configuration and Performance." |
All the code for your application is compiled into a bin directory located at the root of the precompiled site. If you open that directory, you'll see one or more DLLs with names such as App_Web_ekxytkat.dll. All these DLLs start with App_Web_ and then contain a random group of characters. These DLLs are ASP.NET assemblies, and when your website runs on the live server, it runs from these DLLs.
To publish a precompiled web application to a live web server, simply copy all the files and folders in the directory containing the precompiled website to the live server. When you do, ASP.NET automatically begins using the new files.