Automating aspnet_compiler in Visual Web Developer
Visual Studio has a cool user interface for publishing a website using the Publish Web Site dialog, accessible by selecting Build, Publish Web Site. You can use this dialog to pre-compile your website and avoid having to deploy source code.
Visual Web Developer Express doesn't offer this dialog, but because the Publish Web Site dialog is just a front-end for aspnet_compiler.exe, you can use aspnet_compiler.exe from a command prompt to accomplish the same thing if you are a VWD user. While using aspnet_compiler.exe from a command prompt gives you the same functionality, using a menu option is a lot more user-friendly and avoids possibly typos that can be frustrating.
In this post, I'm going to show you how you can add some menu options to VWD that will automate the user of aspnet_compiler. It won't give you the same flexibility and convenience you get with the full-blown Visual Studio, but it will come darn close.
Note: While I will show these steps in Visual Web Developer 2005 Express Edition, you can use the same steps for Visual Web Developer 2008 Express Edition.
To add the new menu item, I'll use the External Tools option on the Tools menu in VWD. (This menu option is also available in Visual Studio.) Using the External Tools dialog, you can add menu items that will execute external applications, and you can also control command line arguments that are passed to your external application and more.
Note: I also explain how to do this in my book, The Expression Web Developer's Guide to ASP.NET 3.5.
We'll create two menu items; one for pre-compiling an updatable application and another for a non-updatable application.
- Launch Visual Web Developer Express.
- Select Tools, External Tools to display the External Tools dialog.
- In the Title box, enter Pre-&Compile (non-updatable) .
- Click the browse button next to the Command box and browse to aspnet_compiler.exe located in c:\Windows\Microsoft.NET\Framework\v2.0.50727.
- Click Open to add the command line for aspnet_compiler.exe.
Now that you've got the correct command line for the aspnet_compiler.exe, it's time to add the arguments that will correctly pre-compile your application. This is where you'll see the true power of the External Tools dialog.
- Type -p " in the Arguments box. (That's an opening double-quote after the p.)
- Click the right-facing arrow next to the Arguments box and select Project Directory.
- Add a trailing double-quote to the Arguments box.
- Press the spacebar to add a space at the end of the existing arguments.
- Type -v / " after the space you just entered.
- Click the right-facing arrow next to the Arguments box and select Project Directory.
- Type \..\CompiledApp" after the existing arguments.
At this point, the Arguments box should contain the following:
-p "$(ProjectDir)" -v / "$(ProjectDir)\..\CompiledApp"
Now check the Close on Exit checkbox and click OK to add the new command to your Tools menu.
You can create another menu item that will compile the application and allow it to be updated by creating another entry using Pre-Co&mpile (updatable) as the Title and by appending -u to the arguments.
After you complete these steps, your pre-compiled application will be saved at the same level as your application's folder. For example, if your website exists in the c:\MyWebsites\WebApplication1, the pre-compiled application will be saved to c:\MyWebsites\CompiledApp. If that folder structure doesn't suit you, you can alter the steps above for your own purposes.
Comments
Anonymous
October 26, 2007
This has been the only drawback for me using the Express editions. Thanks! This is what have been looking for ... for a long time.Anonymous
October 26, 2007
The comment has been removedAnonymous
October 26, 2007
Thanks, Loris. I've corrected that typo. JimAnonymous
February 13, 2008
The comment has been removedAnonymous
February 13, 2008
Hi, Cielo. You'll need to double-check what you've done. Either you've done something wrong or there is a configuration problem. JimAnonymous
February 13, 2008
thanks..i've check the project and it runs successfully but i cannot publish it on website...i'm using visual web developer 2008 express edition but there is no publish site option in the build menu..what are steps for me to publish it on website?Anonymous
February 19, 2008
Cielo, That's the purpose of this blog post. It walks you through automating the aspnet_compiler.exe to add a Build menu item. JimAnonymous
February 19, 2008
Hi All, i have gone through all the post, but it doesnt work for the VWD 2008 users, because there is no any such "aspnet_compiler.exe" in 3.5 framework folder. Please reply me if anybody has solution for this problem.Anonymous
February 19, 2008
The 3.5 Framework is a supplement to the 2.0 Framework. The latest version of the CLR and ASP.NET binaries is 2.0. Therefore, you'll want to use the aspnet_compiler.exe in the v2.0.50727. For more information on versions, see my post here: http://blogs.msdn.com/jamesche/archive/2007/09/25/asp-net-version-madness.aspx JimAnonymous
February 27, 2008
After all the steps I tried to pre-compile. A short time the black window appeared on my screen, but there is no new folder for my pre-compiled application. What did I wrong???Anonymous
February 27, 2008
The comment has been removedAnonymous
February 27, 2008
Non-updatable: -p"$(ProjectDir)" -v/"$(ProjectDir)..CompiledApp" Updatable -p"$(ProjectDir)" -v/"$(ProjectDir)..CompiledApp" -u JacAnonymous
February 27, 2008
Jac, Make sure that you include spaces in the right places. I suspect that's your problem. JimAnonymous
February 28, 2008
Dear Jim, Thank you for your tips. Now everything goes well. I didn't know that I had to insert spaces after p, v and / JacAnonymous
February 28, 2008
Hi, Jac. Glad it's working now. Thanks for the update. JimAnonymous
March 03, 2008
The comment has been removedAnonymous
March 05, 2008
The comment has been removedAnonymous
April 05, 2008
Great article. This is what I was looking for. I also add "-f" option for automatically replacing existing folders. Now, I do not have to browse to the catalog and delete it. Thanks.Anonymous
May 01, 2008
Good news Thank you for the informations.Anonymous
May 20, 2008
hi jamesche, thank you very much for your useful information, great! as Cielo the project runs successfully and I got the compile folder, perfect, but when I publish on website I got this message in a blank page "This is a marker file generated by the precompilation tool, and should not be deleted!" is any other step to follow in order to publish in a website? give me a clue please rodAnonymous
May 20, 2008
Rod, If you precompile without the option of making the site updatable, all of the code in the .aspx pages themselves will be compiled into your assemblies and replace with the placeholder text that you reference. When a request is made for one of those pages, ASP.NET will actually render the page from the assembly that you pre-compiled. It sounds to me like either you didn't deploy your assemblies or that your hosting company has something misconfigured. I don't think it's the former because I suspect you would get an error telling you that the type couldn't be found if that were the case. JimAnonymous
May 20, 2008
ok, Thank you, Jim for the help... now I did compile with the option of making the site updatable. The folder is created and I transfered it through FileZilla to the host server in the browser I got only the code of the default.aspx "<%@ page masterpagefile="~/MasterPage.master" language="C#" autoeventwireup="true" ...etc" any clue? rod rodgeck@hotmail.comAnonymous
May 21, 2008
Sounds to me like a host configuration issue, most likely that ASP.NET is not configured. JimAnonymous
May 29, 2008
Jim You were right. My provider host configuration does not support ASP.NET Thank you vey much for your useful information about the automatic compiler Rgds, rodAnonymous
May 29, 2008
Glad to help, Rod. JimAnonymous
May 30, 2008
James - great info. thank you very much. For my own environment I had to specify alternate source/target directory under the guise of $(ItemDir). I think some other people may run into this (those just getting a short black command window appear then nothing). -p "$(ItemDir)" -v / "$(ItemDir)..CompiledApp" Cheers, nAnonymous
June 02, 2008
The comment has been removedAnonymous
June 03, 2008
Cort, I believe you emailed me from my website. I replied to you, but I never heard back. I take it you are at the same point with your problem. You should have a copy of aspnet_compiler.exe in the following folder: %windir%Microsoft.NETFrameworkv2.0.50727 If you don't, it means that either 2.0 isn't installed or it's installed incorrectly. JimAnonymous
June 04, 2008
Hi Jim, I did reply - not sure what happened - but perhaps its for the best - my answer had little reference to the problem. I have downloaded .NET 3.5 again and have searched and searched for the file (using Search) and looking in operating system and other files but have been unable to find the file. I can find this file v2.0.50727 but when I open the folder there's nothing in it. Sorry about the trouble - I am a real novice!Anonymous
June 05, 2008
Cort, The 3.5 Framework cannot stand on its own. It builds upon the 2.0 Framework. Therefore, in order to use the 3.5 Framework, you also need to have the 2.0 Framework installed. If you have nothing in the v2.0.50727 folder, that tells me that you don't have the 2.0 Framework installed. I would first try installing that and see if it resolves your problem. JimAnonymous
June 05, 2008
Thanks Jim as I stated in my first e-mail when I try to install 2.0 I get an error message stating 'error product already installed'. I'm trying to download the version 2.0 redistributable package http://www.microsoft.com/downloads/thankyou.aspx?familyId=0856eacb-4362-4b0d-8edd-aab15c5e04f5&displayLang=en Should I try another package? Should I just get rid of 3.5 and install 2.0? Thanks for hanging with me on this.Anonymous
June 05, 2008
Cort, I suspect that your install of the 2.0 Framework is corrupt. I would uninstall it and reinstall it to see if that resolves it. JimAnonymous
June 06, 2008
The comment has been removedAnonymous
June 07, 2008
Cort, If you follow these steps, you will have a menu entry for pre-compilation, but when you click it, it's going to run VWDExpress.exe. That's not going to work and likely will generate an error. In order for this to work, you must select the aspnet_compiler.exe. To add to that, it's important to note that if the 2.0 Framework isn't properly installed, you can't run ASP.NET 3.5 or 2.0. JimAnonymous
June 07, 2008
The comment has been removedAnonymous
June 12, 2008
Can any one please tell me what is the EQUIVALENT for aspnet_compiler.exe in .NET 3.5 .. In case I need to do the entire process using compiler of .net 3.5 .. i am not able to locate aspnet_compiler.exe in .net 3.5 folder ..Anonymous
June 13, 2008
Hi, Ersumanta. There isn't a new version of aspnet_compiler.exe for the 3.5 Framework. The latest version is the 2.0 version. JimAnonymous
June 17, 2008
The comment has been removedAnonymous
June 17, 2008
Brian, There can be many reasons why an assembly fails to load. However, what you are seeing looks like it might not be finding the assembly at all. You'll need to check with GoDaddy to be sure what's happening, but I'd check that they are running the right version of ASP.NET as well. Was there any additional information on the error page? JimAnonymous
June 18, 2008
The comment has been removedAnonymous
June 24, 2008
please, I am really new and don't know how publish web site. Your explanation is clear, now I have folder CompiledApp on my disk C. But how I can publish it on my domain name.Anonymous
June 24, 2008
please, I am really new and don't know how publish web site. Your explanation is clear, now I have folder CompiledApp on my disk C. But how I can publish it on my domain name. my hosting says : " you should not have compiled files behind your domain name folder. " how I can compile it in my domain folder?Anonymous
June 24, 2008
sorry for bothering you, I published!!!! it works perfect!!!!!! Thank you so much!!!!!!!!!!Anonymous
June 26, 2008
Brian, That should work as long as the assembly has been deployed to the server. If it doesn't, it's impossible to say why without getting some more detailed information from the hosting company and troubleshooting it. JimAnonymous
June 26, 2008
Alex, Thanks for the update. Glad to hear it's working. :) JimAnonymous
July 29, 2008
I'm new to Asp.net and I found that your automation for the publish button is very useful but I compiled the website and I got it compiled and what i wanted to do is to use it with the IIS available in my machine. I have this error as a result: Server Application Unavailable The web application you are attempting to access on this web server is currently unavailable. Please hit the "Refresh" button in your web browser to retry your request. I don't know what to do exactly and at the same time I want to upload it to another server but I need to be sure first that it's working on the IIS. Can you tell me what should I do exactly? .. Thank you so much NeamatAnonymous
July 29, 2008
Neamat, That error can be caused by any number of things. It may not even be related to ASP.NET. I'm afraid that there's not enough information here to help you. My suggestion is that you contact our product support and open a case to investigate this further. JimAnonymous
September 23, 2008
Thank you! This is a life saver!Anonymous
October 18, 2008
Just saw this aspnet_compiler article - I am going to try it out - Thanks for making it available to all. NormAnonymous
February 27, 2009
I have the same problem as Sally - http://blogs.msdn.com/jamesche/archive/2007/09/27/automating-aspnet-compiler-in-visual-web-developer.aspx#8006229 . The compiler runs, I get a few compile warnings variables defined and not used etc, the utput directory is created, but empty. Any ideas?Anonymous
May 21, 2009
Excellent, thank you very much!Anonymous
July 06, 2009
The comment has been removedAnonymous
July 06, 2009
The comment has been removedAnonymous
July 06, 2009
Martin, If the directory is empty, it's because the compile didn't succeed. I would look into the errors you say you are seeing and fix them. JimAnonymous
July 06, 2009
Tom, I'm not sure what you're asking. This article is designed to teach you how to replicate the behavior in VS's Publish Web Site dialog inside of VWD. JimAnonymous
September 09, 2009
I am not understanding the ", App_Web_..." part of the publish. I am trying to publish a web site and then move a couple of the compiled web files to production site. Is there something I need to do in configuration to make this happen? ThnxAnonymous
September 09, 2009
Kevin, The App_Web assemblies contain the code that was pre-compiled by the publish process. The number of these that you'll have depends upon whether or not you are using fixed names in the publish dialog. Typically, the Publish process compiles the site and deploys the site. In other words, the destination for the publish is the location of your site. If you want to deploy manually, you need to copy over the /bin folder, the .aspx files, and any other supporting files/folders specific to your app like .config files, app_data, etc. JimAnonymous
October 02, 2009
Hi, Thanks for the tutorial about the compiler awsome! though i do need some more assistance.. i have it compiled fine.. it generated the CompileApp folder and there is stuff inside it. I put those files on the webserver, and I opened the MySite/Default.aspx page and it just says: "This is a marker file generated by the precompilation tool, and should not be deleted!" I don't really know how I can have my website to show. Thank you for the help in advance.Anonymous
October 02, 2009
Hi, Jackie. That will happen if you specify the switch to now make the site updatable. In that case, all of the code for your pages is contained within the compiled DLLs and the .aspx pages are there only so that the web server sees a file. JimAnonymous
October 02, 2009
The comment has been removedAnonymous
October 02, 2009
The comment has been removedAnonymous
December 27, 2009
The comment has been removedAnonymous
August 18, 2010
Thanks a lot my friend for this brilliant method for publishing my website, may Allah bless you...Anonymous
December 07, 2010
Thank you for this amazing post. I'm hosting a website for the first time, and I want everything to be legal since I have no money to buy VS licence. This advice makes precompiling the site in VWD 2010 hassle free.Anonymous
May 17, 2011
The comment has been removed