HOWTO: Install and Run ASP.Net 2.0 Side-by-Side

Hmm, this is one of the more unusual questions that I have received lately…


how do you setup 2 along side with 1.1 in Windows 2003/IIS6? do i need sdk or redistributable package?


The Redistributable package allows you to run .Net applications. The SDK just contains additional tools (like ILDASM, SN), samples, documentation, etc necessary for a developer to fully develop with .Net.

Since it sounds like you just want to run different versions of ASP.Net side by side, you just need to:

  1. Download the .Net Framework Redistributable Package from:

  2. Install it on Windows Server 2003

ASP.Net 2.0 will automatically be set up as the default.

Since you cannot load multiple versions of the CLR into the same process, you cannot run applications of different ASP.Net versions in the same Application Pool. For IIS6 in Worker Process Isolation Mode, this means that you must:

  1. Create different Application Pools, one for ASP.Net 1.1 and another for ASP.Net 2.0

  2. Configure your ASP.Net application to use either Application Pool as appropriate

  3. Configure the IIS Scriptmaps of that application to either point to ASP.Net 1.1 ISAPI or ASP.Net 2.0 ISAPI

ASPNET_REGIIS.EXE of .Net Framework 2.0 has several options that you want to explore concerning versioning of .Net applications and appropriate configuration of IIS Scriptmaps. You probably want to head to for more community information, or read this topic on MSDN


Comments (12)

  1. Byron says:

    I’ve been working with developers to load the 2.0 framework on some W2K test servers. When I installed the Beta2 and recently the Release version of 2.0 on the server it creates the ASP.NET tab at the site level and virtual directory level. But the default framework has always been 1.1 for existing sites.

    Is there a situation when the default framework for existing sites is different?

  2. David Wang says:

    Byron – I think the behavior really depends on the ASPNET_REGIIS.EXE commandline options chosen by .Net Framework setup. If you are really curious, you can always use NT ImageFileExecutionOptions to attach a usermode debugger to aspnet_regiis.exe by image name, and with symbols from the public Microsoft symbols server, obtain the commandline using !peb and get the answer that way.

    Or… I can ask the setup tester for ASP.Net who told me that on upgrades, the commandline parameter used is -ir, so existing versions should be left alone for compatibility reasons.


  3. Jack says:

    i use Helm control panel and it let you switch between 2 and 1.1

    i just don’t quite understand if i need to map windows service extension(script) under .aspx or i need to create another just for 2

  4. David Wang says:

    Jack – You should not need to do either. ASPNET_REGIIS.EXE should handle all of that for you (I would not be surprised if Helm just calls ASPNET_REGIIS.EXE underneath the covers – that’s what I would do because I wouldn’t want to second guess what ASP.Net is doing within my own product…).

    Creating another Application mapping does not make sense. Yes, you can run multiple ASP.Net application versions side-by-side on the same server, with the caveat that none can be in the same process. In an IIS6 context, it means that none can be in the same Application Pool, and since each application belongs to exactly one Application Pool and Application Mappings are tied to the application’s namespace, it means that .aspx extension can only be for one version of ASP.Net.

    In other words, having .aspx map to ASP.Net 1.1 and .aspx2 map to ASP.Net 2.0 does not make sense. You won’t be able to run them both simultaneously in the same application/pool anyway.


  5. Jack says:

    Thank, David. i’ll try it out.

  6. Gary says:

    I am a programmer and need to develop using VS2003 and VS2005.

    Right now I am doing VS2003 development in a VM because when I try to do it otherwise I get the message

    "Unable to start debugging on web server"

    Every thing worked fine before installing VS2005.

  7. David Wang says:

    One of the cooler but definitely unsung feature of the IIS7 Server Core is PreConditions. So, that’s…

  8. Bob Tasa says:

    Side-by-Side  is a joke.

    I several web sites I am developing. Some older sites are .NET 1.1

    and some are .NET 2.0

    Without a special batch file and other hoops

    There is no way to debug them and work with them on the same


    I got it to work but had to set and reset so often I gave up and

    just configured 2 different machines.

    Here is the batch file. It reconfigures the web server to look at 2.x first. I wrote another to go the other way.

    This is ONE Sided architecture.


    @echo off

    echo ———————-

    echo ASP.NET & IIS Re-Bind

    echo ———————-

    echo Stopping IIS

    iisreset /stop

    echo ———————-

    echo Deleting the ASPNET account

    net user ASPNET /delete

    echo ———————-

    echo Stopping ASP.NET State Service

    net stop aspnet_state

    echo ———————-

    echo Reregistering ASP.NET and the ASPNET account.

    C:winntMicrosoft.NETFrameworkv2.0.50727aspnet_regiis.exe -i

    echo ———————-

    echo Starting ASP.NET State Service

    net start aspnet_state

    echo ———————-

    echo Atempting to restart IIS

    iisreset /start

    echo ———————-

    echo IIS Resetting


    echo Binding Complete…


    @echo on

  9. David.Wang says:

    Bob – Sorry, but the batch file you show is exactly ONE Sided architecture (it resets the global scriptmap to .Net 2.0), so I am not surprised Side-by-Side does not work.

    Due to Framework versioning issue within a process, Side-by-Side is accomplished exactly as I describe above. Prior to IIS6, all you have to do is set up scriptmaps on a per-URL basis using ASPNET_REGIIS.EXE and ASP.Net does the rest. On IIS6 due to Application Pool, you can only have one framework version per Application Pool, so in addition to setting up scriptmaps on a per-URL basis you have to create and use 1.0, 1.1, and 2.0 application pools, respectively.

    If you are trying to mix .Net versions within the same URL namespace, it won’t work so nicely, but what you are doing is not versioning, either.

    Many people successfully develop against .Net 1.1 and .Net 2.0 simultaneously. You can too, if you want.


  10. Jakob Nielsen says:


    I have recently deployed .NET 2.0 on a test-WebFarm and on a test-BizTalk 2004 cluster. Due to incompatibility with BizTalk Server 2004 SP1, we desided to uninstall .NET 2.0 from there serveres, until we have deployed BizTalk Server 2004 SP2.

    Tests didn’t show any abnormal on the WebFarm, until we deployed a new webservice, that needed I/O permissions on a remote fileshare.

    First we added a strong name to the assembly and registered it in the GAC, due to the issue in .NET 2.0 where assemblies by default is only provided medium trust. Then we just got a new error.

    Using the FileMon utility we found, that the access with .NET 2.0 is changed to the IWAM account (with .NET 1.1 the access were conducted with the IUSR account)

    I created the following script to control which .NET version the assembly uses (change the <…>):

    C:WINDOWSMicrosoft.NETFrameworkv2.0.50727aspnet_regiis -s W3SVC/<WebSiteID>/ROOT/COMMON -norestart

    C:WINDOWSSystem32iisapp /a <AppPool> /r

    We still got errors …

    At last I ran a IISRESET /RESTART for a server in the WebFarm, and suddenly it all performed without any errors on that server !

    Despite my general reluctance with using the IISRESET, we might be forced to incorporate a standard IISRESET /RESTART after each deployment of a webservice that uses .NET 2.0  ….

    I have not been able to figure out what is the correct solution, and what actually causes this behavoir, but my solution for now is to make a IISRESET /RESTART after deploying .NET 2.0 ….



  11. Rob Meade says:

    we have both 1.1 and 2.0 installed on our intranet cluster (2 x w2k3 servers).  I have noticed that if I need to change "anything" in IIS for a .net 2.0 website IIS goes mental and stops the entire virtual website.

    This so far has included changing the version of .net on the ASP.Net tab, adding a new "default document" – anyone got any ideas?

    The outcome of this is when I launch a new app I will always stop our entire intranet service, or at least, half of it, the other node in the cluster will obviously stay up – any thoughts?

  12. Murali says:

    I have faced same issue. I am using 1.1 and 2.0 at the same server (windows 2003). Only one version was running at a time and other version got errored out.

    I have created new applcation pool for 2.0 and linked to 2.0 applications then both verison started working fine.

    Thank you David.