views:

392

answers:

3

I've just started investigating the Microsoft Ajax Minifer 4.0 for use with a Visual Studio 2008 Web Application I work on. It's proven easy enough to hook it into the .csproj file so it produced .min.js files for all scripts, however I'm stumped as to how to integrate this with the Web Setup project & Source Control.

Essentially what I want to do is have the resultant .min.js files included in the Web Setup project without having them included in Source Control because:

  1. Having to check them out prior to the build being executing is a pain (the minifier cannot modify them if they're not checked out).
  2. As they're created as a "build artifact" it just seems wrong to have them stored under source control.

The only option I've managed to come across so far is to explicitly include the .min.js files as part of the Setup project by right clicking on the Web Setup project and choosing "Add > File", and then having the relevant folder hierarchy duplicated in "File System on Target Machine" so that I can force the file to the correct location. This is neither elegant or simple/robust as:

  1. It requires me to manually add every minified js file to the Web Setup project by hand
  2. Maintain a copy of the relevant directory structure in both the Web Application project and the Web Setup project
  3. Remember to add any new js files minified versions to the Web Setup project

Is there a better way of doing this?

A: 

Using the Microsoft Ajax Minifier with Source Control

The Microsoft Ajax Minifier generates the minified JavaScript and CSS files as the output of the build process. For this reason, we recommend that you handle the minified files in exactly the same way as you would handle the assemblies generated by the build process. In particular, we recommend that you do not include the minified files in your Visual Studio project and that you do not check the minified files into source control.

If you include the minified files in your project, and you use source control, then you will encounter problems. When files are checked out of source control, they are checked out with their read-only attributes set. If you attempt to do a build, the Microsoft Ajax Minifier will generate an error when it attempts to write to a read-only file.

source : Microsoft

From my understanding, this means do not add the -min files to the project, that's it. When IIS will build the app, it will create the files automatically. I think you must have Microsoft Minifier 4.0 to be installed on the web server tho.

lucian.jp
@lucian.jp, As I've mentioned in my question, I'm targeting a Web Setup project which thus **does not include anything that is not in the .csproj file**. As it stands this makes it a non-starter for me. I'm also not sure what you mean by "When IIS will build the app, it will create the files automaticall"?
Rob
+1  A: 

The solution I eventually opted for was to include the minifier DLL in my project and create a handler (.ashx) that I've replaced all references to .js files with, so:

<script src="MyJsFile.js" type="text/javascript"></script>

Is replaced with

<script src="Minifier.ashx?file=MyJsFile.js" type="text/javascript"></script>

I have a configuration setting in my web.config file that allows me to determine whether script files are minifed or not.

Rob
A: 

hello i have the same problem

can you explain a little bit detailed

thank you

PokemonCraft
As I've said in my answer, I created an .ashx handler that takes the name of the .js file, passes it into the minifier DLL and returns the minified version of the script. I've not got the code anymore, but if you have a play around with doing that with the DLL, you should find it works quite well =)
Rob
so you have to add all js files manually :( which means you can not minify dynamically created javascript functions
PokemonCraft