public void Setup() { javaScriptBundleFactory = new JavaScriptBundleFactory(); var retryableFileOpener = new RetryableFileOpener(); hasher = new Hasher(retryableFileOpener); }
private CrusherManager() { var crusherConfiguration = CurrentCrusherConfiguration.Current; _hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName; _cssGroups = crusherConfiguration.CssGroups; _jsGroups = crusherConfiguration.JsGroups; var retryableFileOpener = new RetryableFileOpener(); var hasher = new Hasher(retryableFileOpener); var retryableFileWriter = new RetryableFileWriter(BufferSize, _encoding, retryableFileOpener, hasher); _pathProvider = new PathProvider(); var cssAssetsFileHasher = new CssAssetsFileHasher(_hashQueryStringKeyName, hasher, _pathProvider); var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, _pathProvider); var cacheManager = new HttpCacheManager(); var jsSpriteMetaDataFileInfo = new FileInfo("js.metadata"); var jsMetaData = new SingleFileMetaData(jsSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter); var cssSpriteMetaDataFileInfo = new FileInfo("css.metadata"); var cssMetaData = new SingleFileMetaData(cssSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter); _cssCrusher = new CssCrusher(cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter, cssMetaData, crusherConfiguration.WatchAssets); _jsCrusher = new JsCrusher(cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter, jsMetaData); InitManager(); }
public void Setup() { cssBundleFactory = new CssBundleFactory(); var retryableFileOpener = new RetryableFileOpener(); hasher = new Hasher(retryableFileOpener); }
public void OpenFileStream_Throws_Exception_With_Filepath() { var fakePath = Guid.NewGuid().ToString(); var opener = new RetryableFileOpener(); var ex = Assert.Throws <IOException>(() => opener.OpenFileStream(fakePath, 0, FileMode.Open, FileAccess.ReadWrite, FileShare.None)); Assert.True(ex.Message.Contains(fakePath)); }
public void OpenTextStreamReader_Throws_Exception_With_Filepath() { var fakePath = Guid.NewGuid().ToString(); var opener = new RetryableFileOpener(); var ex = Assert.Throws <IOException>(() => opener.OpenTextStreamReader(fakePath, 0)); Assert.True(ex.Message.Contains(fakePath)); }
private CssSpriteManager() { var retryableFileOpener = new RetryableFileOpener(); var hasher = new Hasher(retryableFileOpener); var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher); _pathProvider = new PathProvider(); _cssSpriteCreator = new CssSpriteCreator(retryableFileOpener, hasher, retryableFileWriter); InitManager(); }
private CrusherManager() { var retryableFileOpener = new RetryableFileOpener(); var hasher = new Hasher(retryableFileOpener); var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher); _pathProvider = new PathProvider(); var cssAssetsFileHasher = new CssAssetsFileHasher(_hashQueryStringKeyName, hasher, _pathProvider); var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, _pathProvider); _cssCrusher = new CssCrusher(retryableFileOpener, retryableFileWriter, cssPathRewriter, _pathProvider); _jsCrusher = new JsCrusher(retryableFileOpener, retryableFileWriter, _pathProvider); InitManager(); }
private CssSpriteManager() { var retryableFileOpener = new RetryableFileOpener(); var hasher = new Hasher(retryableFileOpener); var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher); _cacheManager = new HttpCacheManager(); _pathProvider = new PathProvider(); _cssSpriteCreator = new CssSpriteCreator(_cacheManager, retryableFileOpener, _pathProvider, retryableFileWriter); InitManager(); }
public Configuration() { DefaultJavascriptMimeType = "application/javascript"; DefaultCssMimeType = "text/css"; DefaultCacheInvalidationStrategy = new DefaultCacheInvalidationStrategy(); DefaultCssMinifier = new Minifiers.CSS.MsMinifier(); DefaultHashKeyName = "r"; DefaultJsMinifier = new Minifiers.JavaScript.MsMinifier(); DefaultTempPathProvider = new TempPathProvider(); DefaultRetryableFileOpener = new RetryableFileOpener(); DefaultHasher = new SHA1Hasher(DefaultRetryableFileOpener); }
protected override void Given() { base.Given(); FileToHash = new FileInfo(FileName); FileStream = MockRepository.GenerateMock <FileStream>(); RetryableFileOpener.Expect(x => x.OpenFileStream(FileToHash, 5, FileMode.Open, FileAccess.Read, FileShare.Read)).Return(FileStream); Func <byte[], int, int, int> read = Stream.Read; FileStream.Stub(x => x.Read(null, 0, 0)).IgnoreArguments().Do(read); }
private CssSpriteManager() { var retryableFileOpener = new RetryableFileOpener(); var hasher = new Hasher(retryableFileOpener); var retryableFileWriter = new RetryableFileWriter(BufferSize, _encoding, retryableFileOpener, hasher); var cacheManager = new HttpCacheManager(); _pathProvider = new PathProvider(); var cssSpriteMetaDataFileInfo = new FileInfo("cssSprite.metadata"); _cssSpriteMetaData = new SingleFileMetaData(cssSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter); _cssSpriteCreator = new CssSpriteCreator(cacheManager, retryableFileOpener, _pathProvider, retryableFileWriter, _cssSpriteMetaData); InitManager(); }
public void Setup() { var nonDebugStatusReader = new StubDebugStatusReader(false); var debugStatusReader = new StubDebugStatusReader(true); currentDirectoryWrapper = new StubCurrentDirectoryWrapper(); stubBundleCache = new ApplicationCache(); var retryableFileOpener = new RetryableFileOpener(); hasher = new Hasher(retryableFileOpener); //fileReaderFactory.SetContents(javaScript); javaScriptBundle = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); javaScriptBundle2 = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); debugJavaScriptBundle = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); debugJavaScriptBundle2 = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); outputFileNumber += 1; currentOutputFile = outputFileRoot + outputFileNumber + ".js"; }
public void Setup() { var nonDebugStatusReader = new StubDebugStatusReader(false); var debugStatusReader = new StubDebugStatusReader(true); fileWriterFactory = new StubFileWriterFactory(); fileReaderFactory = new StubFileReaderFactory(); currentDirectoryWrapper = new StubCurrentDirectoryWrapper(); stubBundleCache = new StubBundleCache(); var retryableFileOpener = new RetryableFileOpener(); hasher = new Hasher(retryableFileOpener); fileReaderFactory.SetContents(javaScript); javaScriptBundle = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); javaScriptBundle2 = new JavaScriptBundle(nonDebugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); debugJavaScriptBundle = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); debugJavaScriptBundle2 = new JavaScriptBundle(debugStatusReader, fileWriterFactory, fileReaderFactory, currentDirectoryWrapper, hasher, stubBundleCache); }
public void OpenTextStreamWriter_Directory_DoesNotExists_ShouldCreate() { var folder = TestUtilities.PreparePath(Path.Combine(Environment.CurrentDirectory, Guid.NewGuid().ToString(), Guid.NewGuid().ToString())); try { var opener = new RetryableFileOpener(); var filePath = Path.Combine(folder, "file.js"); using (opener.OpenTextStreamWriter(filePath, 2, false)) { } Assert.True(File.Exists(filePath)); } finally { Directory.Delete(folder, true); } }
private CrusherManager() { var crusherConfiguration = CurrentCrusherConfiguration.Current; _hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName; _cssGroups = crusherConfiguration.CssGroups; _jsGroups = crusherConfiguration.JsGroups; var retryableFileOpener = new RetryableFileOpener(); var hasher = new Hasher(retryableFileOpener); var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher); _pathProvider = new PathProvider(); var cssAssetsFileHasher = new CssAssetsFileHasher(_hashQueryStringKeyName, hasher, _pathProvider); var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, _pathProvider); _cacheManager = new HttpCacheManager(); _cssCrusher = new CssCrusher(_cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter); _jsCrusher = new JsCrusher(_cacheManager, _pathProvider, retryableFileOpener, retryableFileWriter); InitManager(); }
public void OpenFileStream_Directory_Exists() { var folder = TestUtilities.PreparePath(Path.Combine(Environment.CurrentDirectory, Guid.NewGuid().ToString())); try { Directory.CreateDirectory(folder); var opener = new RetryableFileOpener(); var filePath = Path.Combine(folder, "file.js"); using (opener.OpenFileStream(filePath, 1, FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite)) { } Assert.True(File.Exists(filePath)); } finally { Directory.Delete(folder, true); } }
public object Clone() { var cssSpriteConfiguration = GetCssSpriteSection(_configPath, CssSpriteSectionName); var crusherConfiguration = GetCrusherSection(_configPath, CrusherSectionName); var configUri = new Uri(_configPath, UriKind.RelativeOrAbsolute); if (!configUri.IsAbsoluteUri) { configUri = new Uri(Path.Combine(Environment.CurrentDirectory, configUri.ToString())); } var physicalApplicationPath = new FileInfo(configUri.LocalPath).DirectoryName; var retryableFileOpener = new RetryableFileOpener(); var hasher = new Hasher(retryableFileOpener); var retryableFileWriter = new RetryableFileWriter(BufferSize, Encoding, retryableFileOpener, hasher); var pathProvider = new PathProvider(_applicationPath, physicalApplicationPath); var cacheManager = new HttpCacheManager(); var cssSpriteOutput = string.Empty; var jsOutput = string.Empty; var cssOutput = string.Empty; var countdownEvents = new CountdownEvent(1); ThreadPool.QueueUserWorkItem(data => { var countdownEvent = (CountdownEvent)data; try { if (cssSpriteConfiguration != null) { var cssSpriteGroups = cssSpriteConfiguration.CssSpriteGroups; var cssSpriteCreator = new CssSpriteCreator(cacheManager, retryableFileOpener, pathProvider, retryableFileWriter); var cssSpriteGroupsProcessor = new CssSpriteGroupsProcessor(); cssSpriteOutput = cssSpriteGroupsProcessor.ProcessGroups(pathProvider, cssSpriteCreator, cssSpriteGroups).ToString(); _logMessage(cssSpriteOutput); } } catch (Exception exception) { _logError(exception.ToString()); } countdownEvent.Signal(); }, countdownEvents); countdownEvents.Wait(); countdownEvents = new CountdownEvent(2); ThreadPool.QueueUserWorkItem(data => { var countdownEvent = (CountdownEvent)data; try { if (crusherConfiguration != null) { var jsCrusher = new JsCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter); var jsGroups = crusherConfiguration.JsGroups; var jsGroupsProcessor = new JsGroupsProcessor(); jsOutput = jsGroupsProcessor.ProcessGroups(pathProvider, jsCrusher, jsGroups).ToString(); _logMessage(jsOutput); } } catch (Exception exception) { _logError(exception.ToString()); } countdownEvent.Signal(); }, countdownEvents); ThreadPool.QueueUserWorkItem(data => { var countdownEvent = (CountdownEvent)data; try { if (crusherConfiguration != null) { var hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName; var cssAssetsFileHasher = new CssAssetsFileHasher(hashQueryStringKeyName, hasher, pathProvider); var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, pathProvider); var cssCrusher = new CssCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter); var cssGroups = crusherConfiguration.CssGroups; var cssGroupsCrusher = new CssGroupsProcessor(); cssOutput = cssGroupsCrusher.ProcessGroups(pathProvider, cssCrusher, cssGroups).ToString(); _logMessage(cssOutput); } } catch (Exception exception) { _logError(exception.ToString()); } countdownEvent.Signal(); }, countdownEvents); countdownEvents.Wait(); return(null); }
static int Main(string[] args) { var showHelp = false; var configPath = string.Empty; var crusherSectionName = "Crusher"; var cssSpriteSectionName = "CssSprite"; var applicationPath = "/"; var options = new OptionSet() { { "c=|configPath=", "the configuration path to the web.config or app.config file. E.g. ../../../Talifun.Web.Examples/Crusher.Demo/web.config", c => configPath = c }, { "cs=|crusherSectionName=", "the section name of the configuration element for the Talifun.Crusher configuration. Defaults to 'Crusher' if not specified.", cs => crusherSectionName = cs }, { "css=|cssSpriteSectionName=", "the section name of the configuration element for the Talifun.CssSprite configuration. Defaults to 'CssSprite' if not specified.", css => cssSpriteSectionName = css }, { "a=|applicationPath=", "the application path to be relative from. Defaults to '/' if not specified.", a => applicationPath = a }, { "?|h|help", "display help screen", h => showHelp = h != null } }; try { options.Parse(args); } catch (OptionException e) { Console.WriteLine(HeaderMessage); Console.WriteLine(e.Message); Console.WriteLine(UsageMessage); Console.WriteLine(HelpMessage); return(DisplayHelpScreenExitCode); } if (showHelp) { DisplayHelp(options); return(DisplayHelpScreenExitCode); } if (string.IsNullOrEmpty(configPath)) { Console.WriteLine(HeaderMessage); Console.WriteLine(UsageMessage); Console.WriteLine(HelpMessage); return(DisplayHelpScreenExitCode); } var crusherConfiguration = GetCrusherSection(configPath, crusherSectionName); var cssSpriteConfiguration = GetCssSpriteSection(configPath, cssSpriteSectionName); if (crusherConfiguration == null && cssSpriteConfiguration == null) { Console.WriteLine(HeaderMessage); Console.WriteLine("\"{0}\" section name not found in {1} ", cssSpriteSectionName, configPath); Console.WriteLine("\"{0}\" section name not found in {1} ", crusherSectionName, configPath); Console.WriteLine(HelpMessage); return(DisplayHelpScreenExitCode); } try { Console.WriteLine(); Console.WriteLine("Settings used:"); Console.WriteLine("configPath = " + configPath); Console.WriteLine("cssSpriteSectionName = " + cssSpriteSectionName); Console.WriteLine("crusherSectionName = " + crusherSectionName); Console.WriteLine("applicationPath = " + applicationPath); var configUri = new Uri(configPath, UriKind.RelativeOrAbsolute); if (!configUri.IsAbsoluteUri) { configUri = new Uri(Path.Combine(Environment.CurrentDirectory, configUri.ToString())); } var physicalApplicationPath = new FileInfo(configUri.LocalPath).DirectoryName; var retryableFileOpener = new RetryableFileOpener(); var hasher = new Hasher(retryableFileOpener); var retryableFileWriter = new RetryableFileWriter(BufferSize, Encoding, retryableFileOpener, hasher); var pathProvider = new PathProvider(applicationPath, physicalApplicationPath); var cacheManager = new HttpCacheManager(); var cssSpriteSpriteMetaDataFileInfo = new FileInfo("cssSprite.metadata"); var cssSpriteMetaData = new SingleFileMetaData(cssSpriteSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter); var jsSpriteMetaDataFileInfo = new FileInfo("js.metadata"); var jsMetaData = new SingleFileMetaData(jsSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter); var cssSpriteMetaDataFileInfo = new FileInfo("css.metadata"); var cssMetaData = new SingleFileMetaData(cssSpriteMetaDataFileInfo, retryableFileOpener, retryableFileWriter); var jsOutput = string.Empty; var cssOutput = string.Empty; var cssSpriteOutput = string.Empty; //We want to be able to use output from css sprites in crushed content var countdownEvents = new CountdownEvent(1); var cssSpriteExceptions = new List <CssSpriteException>(); ThreadPool.QueueUserWorkItem(data => { var manualResetEvent = (CountdownEvent)data; try { if (cssSpriteConfiguration != null) { var cssSpriteGroups = cssSpriteConfiguration.CssSpriteGroups; var cssSpriteCreator = new CssSpriteCreator(cacheManager, retryableFileOpener, pathProvider, retryableFileWriter, cssSpriteMetaData); var cssSpriteGroupsProcessor = new CssSpriteGroupsProcessor(); cssSpriteOutput = cssSpriteGroupsProcessor.ProcessGroups(pathProvider, cssSpriteCreator, cssSpriteGroups).ToString(); } } catch (Exception exception) { cssSpriteExceptions.Add(new CssSpriteException(exception)); } manualResetEvent.Signal(); }, countdownEvents); countdownEvents.Wait(); countdownEvents = new CountdownEvent(2); var jsExceptions = new List <JsException>(); ThreadPool.QueueUserWorkItem(data => { var manualResetEvent = (CountdownEvent)data; try { if (crusherConfiguration != null) { var jsCrusher = new JsCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter, jsMetaData); var jsGroups = crusherConfiguration.JsGroups; var jsGroupsProcessor = new JsGroupsProcessor(); jsOutput = jsGroupsProcessor.ProcessGroups(pathProvider, jsCrusher, jsGroups).ToString(); } } catch (Exception exception) { jsExceptions.Add(new JsException(exception)); } manualResetEvent.Signal(); }, countdownEvents); var cssExceptions = new List <CssException>(); ThreadPool.QueueUserWorkItem(data => { var manualResetEvent = (CountdownEvent)data; try { if (crusherConfiguration != null) { var hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName; var cssAssetsFileHasher = new CssAssetsFileHasher(hashQueryStringKeyName, hasher, pathProvider); var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, pathProvider); var cssCrusher = new CssCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter, cssMetaData, crusherConfiguration.WatchAssets); var cssGroups = crusherConfiguration.CssGroups; var cssGroupsCrusher = new CssGroupsProcessor(); cssOutput = cssGroupsCrusher.ProcessGroups(pathProvider, cssCrusher, cssGroups).ToString(); } } catch (Exception exception) { cssExceptions.Add(new CssException(exception)); } manualResetEvent.Signal(); }, countdownEvents); countdownEvents.Wait(); if (string.IsNullOrEmpty(cssSpriteOutput) && !cssSpriteExceptions.Any()) { Console.WriteLine(); Console.WriteLine("Skipping css sprite creation. \"{0}\" section name not found in \"{1}\"", cssSpriteSectionName, configPath); } else { Console.WriteLine(); Console.WriteLine(cssSpriteOutput); if (cssSpriteExceptions.Any()) { Console.WriteLine("Css sprite errors:"); Console.WriteLine(new AggregateException(cssSpriteExceptions.Cast <Exception>())); } } if (string.IsNullOrEmpty(jsOutput) && string.IsNullOrEmpty(cssOutput) && !jsExceptions.Any() && !cssExceptions.Any()) { Console.WriteLine(); Console.WriteLine("Skipping css/js crushed content creation. \"{0}\" section name not found in \"{1}\"", crusherSectionName, configPath); } else { Console.WriteLine(); Console.WriteLine(cssOutput); if (cssExceptions.Any()) { Console.WriteLine("Css errors:"); Console.WriteLine(new AggregateException(cssExceptions.Cast <Exception>())); } Console.WriteLine(); Console.WriteLine(jsOutput); if (jsExceptions.Any()) { Console.WriteLine("Js errors:"); Console.WriteLine(new AggregateException(jsExceptions.Cast <Exception>())); } } } catch (Exception exception) { Console.Write(exception); return(ErrorExitCode); } return(SuccessExitCode); }
static int Main(string[] args) { var showHelp = false; var configPath = string.Empty; var crusherSectionName = "Crusher"; var cssSpriteSectionName = "CssSprite"; var applicationPath = "/"; var options = new OptionSet() { { "c=|configPath=", "the configuration path to the web.config or app.config file. E.g. ../../../Talifun.Web.Examples/Crusher.Demo/web.config", c => configPath = c }, { "cs=|crusherSectionName=", "the section name of the configuration element for the Talifun.Crusher configuration. Defaults to 'Crusher' if not specified.", cs => crusherSectionName = cs }, { "css=|cssSpriteSectionName=", "the section name of the configuration element for the Talifun.CssSprite configuration. Defaults to 'CssSprite' if not specified.", css => cssSpriteSectionName = css }, { "a=|applicationPath=", "the application path to be relative from. Defaults to '/' if not specified.", a => applicationPath = a }, { "?|h|help", "display help screen", h => showHelp = h != null } }; try { options.Parse(args); } catch (OptionException e) { Console.WriteLine(HeaderMessage); Console.WriteLine(e.Message); Console.WriteLine(UsageMessage); Console.WriteLine(HelpMessage); return(DisplayHelpScreenExitCode); } if (showHelp) { DisplayHelp(options); return(DisplayHelpScreenExitCode); } if (string.IsNullOrEmpty(configPath)) { Console.WriteLine(HeaderMessage); Console.WriteLine(UsageMessage); Console.WriteLine(HelpMessage); return(DisplayHelpScreenExitCode); } var crusherConfiguration = GetCrusherSection(configPath, crusherSectionName); var cssSpriteConfiguration = GetCssSpriteSection(configPath, cssSpriteSectionName); if (crusherConfiguration == null && cssSpriteConfiguration == null) { Console.WriteLine(HeaderMessage); Console.WriteLine("\"{0}\" section name not found in {1} ", crusherSectionName, configPath); Console.WriteLine("\"{0}\" section name not found in {1} ", cssSpriteSectionName, configPath); Console.WriteLine(HelpMessage); return(DisplayHelpScreenExitCode); } try { Console.WriteLine(); Console.WriteLine("Settings used:"); Console.WriteLine("configPath = " + configPath); Console.WriteLine("crusherSectionName = " + crusherSectionName); Console.WriteLine("cssSpriteSectionName = " + cssSpriteSectionName); Console.WriteLine("applicationPath = " + applicationPath); var physicalApplicationPath = new FileInfo(configPath).DirectoryName; var retryableFileOpener = new RetryableFileOpener(); var hasher = new Hasher(retryableFileOpener); var retryableFileWriter = new RetryableFileWriter(BufferSize, retryableFileOpener, hasher); var pathProvider = new PathProvider(applicationPath, physicalApplicationPath); var cacheManager = new HttpCacheManager(); if (crusherConfiguration == null) { Console.WriteLine(); Console.WriteLine("Skipping css/js crushed content creation. \"{0}\" section name not found in \"{1}\"", crusherSectionName, configPath); } else { var hashQueryStringKeyName = crusherConfiguration.QuerystringKeyName; var cssAssetsFileHasher = new CssAssetsFileHasher(hashQueryStringKeyName, hasher, pathProvider); var cssPathRewriter = new CssPathRewriter(cssAssetsFileHasher, pathProvider); var cssCrusher = new CssCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter, cssPathRewriter); var jsCrusher = new JsCrusher(cacheManager, pathProvider, retryableFileOpener, retryableFileWriter); var cssGroups = crusherConfiguration.CssGroups; var jsGroups = crusherConfiguration.JsGroups; CreateCrushedFiles(pathProvider, cssGroups, jsGroups, cssCrusher, jsCrusher); Console.WriteLine(); Console.WriteLine(_cssOutput); Console.WriteLine(); Console.WriteLine(_jsOutput); } if (cssSpriteConfiguration == null) { Console.WriteLine(); Console.WriteLine("Skipping css sprite creation. \"{0}\" section name not found in \"{1}\"", cssSpriteSectionName, configPath); } else { var cssSpriteGroups = cssSpriteConfiguration.CssSpriteGroups; var cssSpriteCreator = new CssSpriteCreator(cacheManager, retryableFileOpener, pathProvider, retryableFileWriter); CreateCssSpriteFiles(pathProvider, cssSpriteGroups, cssSpriteCreator); Console.WriteLine(); Console.WriteLine(_cssSpriteOutput); } } catch (Exception exception) { Console.Write(exception); return(ErrorExitCode); } return(SuccessExitCode); }