Tip/Trick: Using ScriptManager ScriptPath to load MicrosoftAjax.js from file system
November 27th, 2006
This isn’t particularly tricky but it can be non-obvious.
If you don’t want to use the embedded resources to serve the Microsoft AJAX JavaScript runtime, but instead you want to have them served from the file system, to make JavaScript debugging more pleasant, then this is what you need to do:
Create a directory structure under your web application’s root directory
You’ll need to create a directory structure that corresponds to the attributes of the assembly that normally contains the script files. In your case you’ll can create a subdirectory structure in your web site like this:
Scripts\Microsoft.Web.Extensions\1.0.61025.0
The top directory doesn’t have to be called Scripts you can call it anything you wish. Since MicrosoftAjax.js is in the Microsoft.Web.Extensions assembly, this is why the second directory level is called Microsoft.Web.Extensions. The final directory is the version number of the DLL. You can see this from your web.config:
<compilation debug="false"> <assemblies> <add assembly="Microsoft.Web.Extensions, Version=1.0.61025.0, ..."/> </assemblies> </compilation>
Copy the ASP.NET AJAX JavaScript runtime files
When you installed ASP.NET AJAX you’ll have had the ASP.NET AJAX JavaScript source files installed, by default into:
C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025\ScriptLibrary\Debug
and
C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025\ScriptLibrary\Release
Copy MicrosoftAjax.js from the Debug directory into your Scripts\Microsoft.Web.Extensions\1.0.61025.0 directory, and rename it to Microsoft.Web.Resources.ScriptLibrary.MicrosoftAjax.debug.js. Then do the same for MicrosoftAjaxTimer.js and MicrosoftAjaxWebForms.js following the same pattern of adding “Microsoft.Web.Resources.ScriptLibrary.” to the start of the filename, and then adding “.debug” in front of the “.js”.
Also copy the same files from the Release directory but this time rename them without adding the “.debug” in front of the “.js”.
Now the source files will be picked up whether or not you are running in debug mode.
Set the ScriptPath on your ScriptManager
Finally, set the ScriptPath property on ASP.NET ScriptManager to tell it to source the ASP.NET AJAX runtime from your new directory:
<asp:ScriptManager ID="sm1" runat="server" ScriptPath="~/Scripts"> </asp:ScriptManager>
Verifying that the JavaScript files are being served from files
If you do a “View Source” in Internet Explorer you should see the JavaScript files being included from the appropriate location:
<script src="Scripts/Microsoft.Web.Extensions/1.0.61025.0/ Microsoft.Web.Resources.ScriptLibrary.MicrosoftAjax.js" type="text/javascript"></script>


January 6th, 2007 at 2:51 pm
Thank you Damian.
I was searching for this.
February 9th, 2007 at 3:05 pm
[...] tried using the techniques detailed on http://forums.asp.net/thread/1489298.aspx & http://damianblog.com/2006/11/27/scriptmanager-scriptpath to load my own copy of PreviewScript.debug.js no avail. I’ve tried different [...]
February 12th, 2007 at 6:56 am
In the final release Microsoft have made this a lot easier since they have pre-structured their directories as required. In order to get this to work you need only copy MicrosoftAjaxLibrary from C:\Program Files\Microsoft ASP.NET\ASP.NET 2.0 AJAX Extensions\v1.0.61025 to your application directory, and set up your ScriptPath to point to ~/MicrosoftAjaxLibrary
June 23rd, 2007 at 6:24 pm
Damian,
I added the Java Script files and I get an exception thrown that it cant find the files it wants. It is looking in
Scripts/System.Web.Extensions/2.0.0.0/MicrosoftAjax.debug.js
instead of
Scripts/System.Web.Extensions/1.0.61025.0/
Do you have any idea why it is ooking for 2.0.0.0 and where do i need to change it? I looked in my code and 2.0.0.0 is only used for famework stuff as expected.
If I change my directory name to 2.0.0.0, everything works fine.
Thanks!
August 1st, 2007 at 1:30 am
[...] Damian Mehers Blog - How to use the ScriptPath attribute. [...]
August 25th, 2007 at 6:57 pm
Ajax is a great tool but… Microsoft AJAX JavaScript runtime files (MicrosoftAjax.js and MicrosoftAjaxWebForms.js) have been loaded once for each page. That is the main disadvantage of using Ajax: loading a page is weighted with additional size of those two JavaScript files. Is it possible to load those files only one time and then reuse them for each page in application? By using cache for example?
January 22nd, 2008 at 1:08 pm
I get “Warning:Unresponsive script
A script on this page may be busy, or it may have stopped responding. You can stop the script now, open the script in the debugger, or let the script continue.” on my web site. If I click on the Continue button I get what I wanted, but the time it takes can not be tolerated.
The script in question is MicrosoftAjax.js
Can anyone tell me why do I get this warning and how do I eliminate it?