private void RegisterBundle(HttpServerUtility server, string bundle, BundleType type, params string[] files) { if (string.IsNullOrWhiteSpace(bundle)) { throw new ArgumentNullException("bundle", "Cannot register an empty bundle"); } var compressor = GetCompressor(type); if (compressor.Cache.ContainsKey(bundle)) { throw new ArgumentException("Bundle already registered"); } if (files == null || files.Length == 0) { throw new ArgumentNullException("files", "No files to register"); } var list = files.ToList(); if (server != null) { list = list.ConvertAll(file => server.MapPath(file)); } if (RaiseErrorIfFileDoesNotExists) { var notFound = list.ToList().FindAll(file => !File.Exists(file)); if (notFound != null && notFound.Count > 0) { throw new ArgumentException(string.Format("Not able to find following files: {0}{1}", Environment.NewLine, string.Join(Environment.NewLine, notFound))); } } if (IsDevMode) { compressor.Cache.Add(bundle, string.Join(Environment.NewLine, files.ToList().ConvertAll(path => string.Format(compressor.Tag, ResolvePath(path))))); } else { StringBuilder sb = new StringBuilder(); var yuiCompressor = compressor.GetCompressor(); list.ToList().ForEach(file => { if (RaiseErrorIfFileDoesNotExists || (!RaiseErrorIfFileDoesNotExists && File.Exists(file))) { sb.Append(yuiCompressor.Compress(File.ReadAllText(file))); } }); if (imageCache.Count > 0) { imageCache.Keys.ToList().ForEach(key => sb.Replace(key, imageCache[key])); } var content = sb.ToString(); content = yuiCompressor.Compress(content); // double compression var format = AddHash ? "{0}." + CreateHash(content) + ".{1}" : "{0}.{1}"; var path = Path.Combine(server.MapPath(compressor.Folder), string.Format(format, bundle, compressor.Extension)); WriteContent(path, content); path = ResolvePath(server.RelativePath(path)); compressor.Cache.Add(bundle, string.Format(compressor.Tag, path)); } }