Improvements in Visual Studio 2005
Visual Studio 2005 provides Web application developers with a long list of improvements and enhancements to Web projects.
Visual Studio 2005 provides Web application developers with a long list of improvements and enhancements to Web projects. As powerful as Visual Studio .NET 2002 and 2003 are, there were many complaints in the way that Web projects were handled. Visual Studio 2005 adds a significant number of new features in order to address these complaints. For those who prefer the way that Visual Studio .NET 2003 handled compilation of Web applications, see Web Application Projects.
In this module, well cover improvements in Web project creation, management, and development. In a later module, well cover improvements in building Web projects and deploying them.
FrontPage Server Extensions
Visual Studio .NET 2002 and 2003 required FrontPage Server Extensions on the box in order to create or build Web projects. Developers did have a choice between two different access modes (FrontPage Server Extensions or File access mode), both used FrontPage Server Extensions to perform tasks such as setting the application root in IIS, etc.
Visual Studio 2005 removes the reliance on FrontPage Server Extensions for local projects. Visual Studio 2005 now accesses the IIS metabase directly instead of using the FrontPage Server Extensions. Visual Studio 2005 also adds support for FTP which allows for remote project access without requiring FrontPage Server Extensions.
For those developers who want to use FrontPage Server Extensions in their projects, the option is still available. However, based upon strong feedback from the ASP.NET developer community, it is not a requirement.
Note: FrontPage Server Extensions are still required for remote project creation, opening, etc.
ASP.NET Development Server
Visual Studio 2005 ships with a new Web server called ASP.NET Development Server. (This Web server was previously known as Cassini.)
There are several benefits of the ASP.NET Development Server.
- It is now possible for non-Administrators to develop and debug against a Web server.
- The ASP.NET Development Server dynamically maps virtual directories to any location in the file system allowing for flexible project locations.
- Users on Windows XP Professional who are already using IIS will now be able to create new Web applications that will not affect the file or folder structure of their Default Web Site in IIS.
No special configuration is required to take advantage of the ASP.NET Development Server. When a Web project that is hosted on the file system is debugged or browsed, Visual Studio 2005 will automatically start an instance of the ASP.NET Development Server on a random port to service the request.
More information will be covered on the ASP.NET Development Server later in this module.
Improved File Management
In Visual Studio 2002 and 2003, a project file (.vbproj for VB.NET and .csproj for C#) stored information on all files in the Web application. The Solution Explorer display is based upon the file information in the project file. Because of this, the Solution Explorer would often display inaccurate information in cases where external editors were used. Visual Studio 2002 and 2003 would often overwrite file changes or not display the most recent version of files.
Visual Studio 2005 does away with the project file. Instead, it reads the file and folder information directly from the disk, resulting in an accurate display of the files in your project. Because the References folder in Visual Studio 2002 and 2003 does not represent an actual folder in your Web application, Visual Studio 2005 also removes the References folder from Solution Explorer. To access the references for your project in Visual Studio 2005, you should use the Property pages for the project.
Creating Web Projects
Web developers have many new options available for project creation in Visual Studio 2005. Web sites can now be created anywhere in the file system and can then be debugged or browsed using the new ASP.NET Development Server. Developers can also create new Web sites using FTP.
Click here to view a video walkthrough of creating Web projects in Visual Studio 2005.
File System Projects
As you saw in the video walkthrough, you can choose to create Web sites on the file system either on the local machine or on a remote location via a file share. Web sites that are created on the file system are browsed and debugged using the ASP.NET Development Server.
Note: The ASP.NET Development Server may cause some confusion for customers. If a Web project is created on the file system in IISs directory structure (i.e. c:\inetpub\wwwroot), the Web site will still be browsed via the ASP.NET Development Server when launched from within Visual Studio 2005. Therefore, any IIS configuration (i.e. authentication methods) is not applicable.
The default web project also removes a lot of the overhead by only includes a Default.aspx page, default.cs file, and an App_Data folder. The web.config and special folders (i.e. app_code) are added as they are needed. Your web project only includes the files and folders that you need.
HTTP projects can either be projects that are created on a local IIS Web site or on a remote Web site. The default project location is http://localhost. If you click the Browse button, there are two HTTP options: Local IIS and Remote Site. The main difference in these two options is the method in which the web site information is displayed in the Choose Location dialog and in how the files are copied to the Web server.
The Local IIS option reads the site information from the metabase on the local machine and files are copied using the file system. The Remote Site option uses the FrontPage Server Extensions and the site information and files are copied using HTTP and FrontPage Server Extensions RPC calls.
Note: The vs###_tmp.htm file and get_aspx_ver.aspx are no longer used to determine version information.
The default HTTP option is Local IIS. This option reads the IIS Metabase to determine which sites are available and the location in which to create content. You can select a different folder or virtual directory by selecting it in the tree view. You can also create a new virtual directory, mark folders as applications, as well as delete existing virtual directories from this dialog box.
Unlike in earlier versions of Visual Studio, if you check the Use Secure Sockets Layer checkbox and the SSL certificate does not match the URL you are browsing, you will be presented with a Security Alert dialog asking you if you would like to proceed. Using Visual Studio .NET 2003, if the certificate was not a matching one, creating the project would fail.
Note on Host Headers
If you are creating a Web application on a site bound to a specific IP, you will need to ensure that a host header is configured. Otherwise, Visual Studio will create the site at http://localhost, but the IP address will not resolve correctly when the site is browsed or debugged from within the IDE.
If you select the Remote Site option, the dialog changes to allow you to enter the destination URL for the new Web site. This URL must be on a server that has the FrontPage Server Extensions enabled. If you want to work with your local Web server using the FrontPage Server Extensions, you can use the Remote Site option and specify a local URL.
When creating an application on a remote site via SSL, if the SSL certificate does not match, the confirmation dialog is slightly different than the dialog displayed when using the Local IIS option.
Visual Studio 2005 introduces the option to create Web sites via FTP. When you use this option, the IDE creates the files locally in the users temp folder and then uses FTP to move the files to the FTP location.
Note: The temp folder location is c:\Documents and Settings\<User>\Local Settings\Temp\VWDWebCache\<Server>_<application name>
When using the FTP option, you will be presented with a Choose Location dialog. You enter the required FTP connection information into this dialog as shown below.
Lab: Setup FTP site and create a project
The following steps configure the FTP site so that a user has a location that only they can upload to via FTP.
Install the FTP Service
- Open Add Remove Programs, select Add/Remove Windows Components
- Select Internet Information Services (Application Server on Windows 2003) and click Details.
- Check File Transfer Protocol (FTP) Service and click OK.
- Click Next to install the FTP service.
Create a New Folder for Content
- In Windows Explorer, create a new folder called User1 inside of c:\inetpub\wwwroot.
Configure folders and permissions on folders.
- Open the Internet Information Services snap-in from Administrative Tools. You will now have an FTP Sites folder under the computer name node.
- Expand FTP Sites.
- Right-click the Default FTP Site, select New, then Virtual Directory, then click Next.
- Enter User1 for the virtual directory name and click Next.
- Enter c:\inetpub\wwwroot\User1 for the path and click Next.
- Click Next and then Finish to complete the wizard.
- Right-click the User1 virtual directory under Default FTP Site and select Properties.
- Check the Write checkbox and click OK to close the dialog.
- Right-click Default FTP Site and select Properties.
- On the Security Accounts tab, uncheck Allow Anonymous Connections.
- Click Yes in the dialog asking if you want to continue.
- Click OK to close the dialog.
- Expand the Default Web Site under the Web Sites node.
- Right-click the User1 directory and select Properties
- In the Application Settings section, click Create to mark the folder as an application.
- Click OK to close the dialog.
- Close the Internet Information Services snap-in.
Create web project
- Open Visual Studio 2005.
- From the File menu, select New Web Site.
- In the Location dropdown, select FTP.
- Click Browse.
- Enter localhost in the Server textbox.
- Enter User1 in the Directory textbox.
- Click Open. The FTP location will be entered into the New Web Site dialog.
- Click OK.
- Uncheck Anonymous log on in the FTP Log On dialog, enter your credentials, and click OK.
- What is the URL for the project? (The URL for the project will be displayed in Solution Explorer.)
- From the Build menu, select Build Web Site or Build Solution.
- Right-click on Default.aspx in Solution Explorer and select View in Browser.
- In the Web Site URL Required dialog, enter http://localhost/user1 for the URL and click OK.
Note: If you get a error indicating an inability to load the type _Default, make sure that you are running ASP.NET 2.0 on your Web site and not an earlier version. You can do that from the ASP.NET tab in Internet Information Services.
Opening Web Projects
Opening Web projects is similar to creating projects. The following sections call out areas to keep an eye out for while working within the IDE. It also covers working with Web projects using HTTP and FTP.
To open a Web project, select Open Web Site from the File menu. You will be prompted with the same Choose Location dialog covered previously and you have the same four options available to you: File System, Local IIS, FTP, and Remote Site.
As indicated previously in this module, Visual Studio no longer uses a project file. Therefore, if you choose to open a Web site from the file system, you actually have the option of choosing any folder that you wish, even if the folder you choose was not created as a Web project initially in Visual Studio. For example, you can choose to open the My Documents folder as a Web site and Visual Studio will happily open it and display your files as shown below.
Because Visual Studio only creates additional files and folders when necessary, no additional files or folders are added to the location you open. A side-effect of this architecture is that it prevents you from nesting Web sites on the file system. For example, consider the following directory structure.
Web project at C:\MyWebSite
Another web project at C:\MyWebSite\Nested
When you open the Web site at c:\MyWebSite, the Nested folder will appear as a sub-folder of that application.
When opening Web sites via HTTP, settings are read either from the IIS metabase (Local IIS) or using FrontPage Server Extensions (Remote Site.) If there are nested web applications, these are displayed as well with an icon identifying them as an application. If you are familiar with working with web applications in FrontPage, the behavior in Visual Studio 2005 is similar.
Even though Visual Studio will display an icon for applications that are nested beneath the application that is currently opened within the IDE, it will not allow you to expand them to see their content. You can, however, double-click on them to open them. When you do, you will be presented with a dialog prompting you to either open the web application (and replace the currently open solution) or add the Web application to your current solution.
When you open a site via FTP, the files are all copied locally to your temp folder. The full path for the local storage location is displayed in the Properties pane for the project and is created using the following format.
C:\Documents and Settings\<User>\Local Settings\Temp\VWDWebCache\<Server>_<application name>
When using FTP, Visual Studio will need to specify the base URL for your project so that you can browse it as shown below. If you do not specify a base URL, Visual Studio will ask you for it the first time you attempt to browse a page in the Web site.
Improvements in Compilation
Working with Web applications in Visual Studio 2005 is noticeably faster than previous versions. This is due in no small part to the changes in compilation architecture.
In Visual Studio 2002 and 2003, Web applications were compiled into one primary assembly residing in the /bin folder. In Visual Studio 2005, an App_Code folder was added. Classes and other non-UI code are added to the App_Code folder. When Visual Studio builds the project, all files in the App_Code folder are compiled into a single App_Code.dll file. The result of this change is that subsequent builds are much faster than in previous versions.
Note: The MSBuild command line utility can also be used to build ASP.NET Web applications. That tool will be covered in module 9.
Another compilation enhancement is the new Build Page option on the Build menu. This feature allows a developer to rebuild only the current page (along with, of course, and dependencies) so that changes can be compiled more quickly. Because C# does not offer background compilation for purposes of updating IntelliSense, etc., they will benefit immensely from this feature because it will allow for IntelliSense to be updated quickly by simply rebuilding a single page.
The Build properties for a project allow you to configure the type of build that occurs before the startup page is executed. Developers can choose to only build the current page so that Visual Studio can start debugging applications more quickly after code changes.
Another great enhancement to Visual Studio and the ASP.NET architecture is in the area of edit and continue. In Visual Studio 2005, developers can start debugging a project and make code changes on the project without detaching the debugger. In fact, you can literally start debugging a project, add a new class, add code to that class, add code to your page that creates a new instance of that class and execute a method of the class, all without detaching the debugger. Executing the new code is literally as easy as refreshing the browser!
Click here to see a video walkthrough of the edit and continue feature in Visual Studio 2005.
The robust edit and continue functionality in ASP.NET 2.0 and Visual Studio 2005 is due to an architectural change for ASP.NET applications. In ASP.NET 1.x, applications created in Visual Studio 2002/2003 were compiled into a primary assembly that was stored in the /bin folder. All classes, pages, etc. for the application were compiled into that one DLL. Then at runtime, ASP.NET would compile all of the controls, markup, and ASP.NET code within pages and copy those DLLs into the ASP.NET temporary folder.
In Visual Studio 2005 using ASP.NET 2.0, the two compilation models outline above (one for Visual Studio and one for ASP.NET at runtime) have been merged into one common compilation model. That means that all compilation issues are now caught during the development stage instead of at runtime. It also allows for designer and IntelliSense support for features such as user controls and master pages.
Click here to see a video walkthrough of designer support for user controls.
Note: When a user control is removed from a page, the @Register directive remains in the markup and should be removed manually in order to avoid parser errors if the user control is deleted from the Web site.
Another improvement in the Visual Studio compilation model is the Publish Web Site feature. Because the Publish feature precompiles the Web site, developers can enjoy the added performance of not having to compile anything on demand. It also precompiles all source code in the App_Code folder into a DLL so that no source code has to be deployed.
Note: The aspnet_compile.exe utility can also be used to pre-compile an ASP.NET Web application. That tool will be covered in module 9.
When you Publish a Web site, the precompiled files are stored in the Temporary ASP.NET Files folder as shown below. Files with a .compiled file extension are XML files that define dependencies for particular DLLs. Any Webform or user controls are compiled into random DLLs that begin with App_Web_.
If you leave the Allow this precompiled site to be updatable checkbox checked, markup inside of your Webforms and user controls will not be pre-compiled into a DLL allowing you to make changes after deployment. If you would prefer to lock down the markup so that changes to the deployed content are not allowed, uncheck this box.
The Use fixed naming and single page assemblies checkbox allows you to disable batch compilation so that each page is compiled into a fixed-named assembly. Leaving this box unchecked allows you to take advantage of batch compilation.
The Enable strong naming on precompiled assemblies checkbox allows you to strong-name your precompiled assemblies.
Note: In ASP.NET 1.x, strong-named assemblies had to be installed into the Global Assembly Cache (GAC). In ASP.NET 2.0, you are not required to install strong-named assemblies into the GAC.
Note: In the application above, there was no web.config file. If there had been, it would have been called PrecompiledApp.config after the Publish Web site process.
Improvements in Deployment
As with Visual Studio 2002 and 2003, Visual Studio 2005 offers a Copy Project feature. However, the feature has been beefed up in Visual Studio 2005 and is now called Copy Web Site.
The Copy Web Site dialog is split into a left frame and a right frame. The left frame is called the Source Web Site and the right frame is called the Remote Web Site. One thing that may confuse some developers is that the site displayed in the right frame is not necessarily a remote site. It could be a site on the local file system or on the local instance of IIS. Additionally, the site displayed in the left frame is not necessarily the source Web site because the dialog allows you to publish from the remote Web site to the source Web site.
If you are copying a project to a remote Web site, that site must have the FrontPage Server Extensions installed on it. If it does not, you will need to connect using FTP. On the other hand, if you are copying a project to the local IIS instance, FrontPage Server Extensions are not required.
Note: If you try to create a new Web site on the local IIS instance and the FrontPage 2002 Server Extensions are installed, you will get an error message telling you that creating Web sites is not supported on a SharePoint server. In that case, you have the option of installing the FrontPage 2000 Server Extensions or removing the FrontPage Server Extensions.
Click here for a video walkthrough of the Copy Web Site feature.
Improvements in Debugging
There are four key improvements in debugging in Visual Studio 2005.
- Debugging locally as a non-administrator is possible out of the box.
- The Debug attribute for the Compilation element is now false by default.
- Remote debugging setup and configuration is easier than before.
- You can now debug a Web site opened via an FTP location.
Debugging as a Non-Administrator
The addition of the ASP.NET Development Server allows non-administrators to easily debug ASP.NET applications right out of the box. When an ASP.NET application running on the local file system is debugged, Visual Studio launches the ASP.NET Development Server under the context of the logged-on user. That user can then debug that application without any additional configuration.
Debug is False by Default
In ASP.NET 1.x, the debug attribute in the compilation element of the web.config file was set to true by default. It has always been recommended that developers set this attribute to false before deploying an application to production, but because most developers don't fully understand the consequences of leaving the debug attribute set to true, they simply left it as-is.
The most severe problem with having the debug attribute set to true is that it disables ASP.NETs batch compilation model. Therefore, each page is compiled into a separate DLL. If a Web application consists of thousands of pages (not unheard of by any means), that means several thousand small DLLs will be created by that application. While these DLLs are small in size, they are not loaded into any particular location in memory. Therefore, they cause fragmentation in system memory and can contribute to OutOfMemoryException occurrences.
In ASP.NET 2.0, the debug attribute is set to false by default. As you have already seen, when a developer debugs an ASP.NET application in Visual Studio 2005, they are prompted to add a web.config file with debugging enabled. Doing so incurs the same drawbacks that were present in ASP.NET 1.x, but now the developer is clearly warned that the attribute should be reset to false before moving the application to production.
Remote Debugging Setup and Configuration
In Visual Studio 2002/2003, remote debugging relied on the Machine Debug Manager (mdm.exe) and the vs7jit.exe process. Because of that, troubleshooting remote debugging problems was often a black box for customers and it was often not much better for PSS.
Visual Studio 2005 removes the reliance on the mdm.exe and vs7jit.exe processes. Instead, it now uses the Remote Debug Monitor service (msvsmon.exe.)
The requirement for debugging in Visual Studio 2005 remotely is quite simple. You need to run msvsmon.exe on the remote server prior to debugging. You can install the Remote Debug Monitor from the Visual Studio CD or you can simply run msvsmon.exe from a share without installing anything at all on the Web server.
When you run msvsmon.exe, it is likely that it will complain about ports being blocked for remote debugging. Fortunately, you can easily unblock the ports from right within the warning dialog as shown below.
Once you have unblocked the ports necessary for debugging, you will see the Remote Debugging Monitor as shown below. From this interface, you can monitor connections and change debugging permissions easily.
It is also possible to remotely debug a Web application opened via FTP. The steps are the same as those previously covered. However, you will need to specify a base URL for browsing the FTP project as outlined earlier in this module.
Remote Debugging with Visual Studio 2005
This lab will walk you through remote debugging with Visual Studio 2005.
Click here for a video walkthrough of this lab.
This lab requires you to have two machines, one running Visual Studio 2005 and the other running IIS 5 or greater.
- Open Visual Studio 2005 and create a new Web site on the remote server.
Note: You can create the Web site on a remote IIS instance or via FTP.
- From the remote Web server, locate msvsmon.exe on the development machine using
a UNC path and execute it.
The default location for msvsmon.exe is \\server\c$\Program Files\Microsoft Visual Studio 8\Common7\IDE\Remote Debugger\x86.
- If prompted to unblock ports for remote debugging, do so.
- From the development machine, open the code-behind for Default.aspx and set a breakpoint in the Page_Load method.
- Start debugging from the development machine.
You should hit the breakpoint as expected.
ASP.NET Development Server
As weve already discussed, Visual Studio 2005 ships with a Web server called the ASP.NET Development Server. (The ASP.NET Development Server is sometimes referred to as Cassini.) This Web server is a convenient means to browse and debug Web applications running on the file system.
The ASP.NET Development Server is a restricted Web server. It does not allow remote connections, it does not allow any requests from any user other than the user who started the Web server. It also does not have the capability of serving ASP pages. Only ASP.NET resources and HTML resources (including images, CSS files, etc.) are served.
The ASP.NET Development Server can be launched via the command line by running the WebDev.WebServer.exe file located at c:\Windows\Microsoft.NET\Framework\v2.0.*****. The following dialog displays the parameters that are available.
Note: The ASP.NET Development Server is not supported when launched explicitly via the command line.