static void Main(string[] args) { var path = args[0].Replace("/", "\\"); var type = args[1]; var outPath = args[2].Replace("/", "\\"); var assetLoader = new AssetLoader(new FakeFileSystem()); // load asset var assetFormat = (AssetFormat)Enum.Parse(typeof(AssetFormat), type, true); var asset = assetLoader.GetAsset(path, assetFormat); if (string.IsNullOrWhiteSpace(asset)) { return; } if (assetFormat == AssetFormat.Css) { var lessCssPreprocessor = new LessCssPreprocessor(); var result = lessCssPreprocessor.Process(asset); if (result.Status != AssetProcessingResult.CompilationStatus.Success) { Console.WriteLine(result.Message); Environment.Exit(-1); } asset = result.Result; } else if (assetFormat == AssetFormat.Js) { var yuiJavascriptCompressor = new YuiJavascriptCompressor(); var result = yuiJavascriptCompressor.Compress(asset); // TODO: handle failure asset = result; } // calc md5 and output var md5 = CalculateMd5Hash(asset); Console.Write(md5); var outFile = Path.Combine(outPath, md5 + '.' + assetFormat.ToString().ToLowerInvariant()); File.WriteAllText(outFile, asset); }
public static void Compile(string inPath, string outPath, string assemblyName) { var binPath = Path.Combine(inPath, "bin"); var webConfigPath = Path.Combine(inPath, "web.config"); AssemblyRepository.Initialize(); AssemblyRepository.LoadAssembliesFromPath(binPath); var razorConfiguration = new RazorConfiguration(webConfigPath, outPath); var cssPreprocessor = new LessCssPreprocessor(); var fileSystem = new BasicFileSystem(inPath); var razorViewCompiler = new AssetEnrichedRazorViewCompiler(razorConfiguration, new YuiJavascriptCompressor(), cssPreprocessor, fileSystem, new AssetLoader(fileSystem)); var views = Directory.GetFiles(inPath, "*.cshtml", SearchOption.AllDirectories).ToList(); if (!views.Any()) { Console.WriteLine($"No views found in path '{inPath}'"); return; } // Find all primary (non-component) view paths which need compiling views = views.Select(v => { var path = Path.GetDirectoryName(v); var name = Path.GetFileNameWithoutExtension(v); var ext = Path.GetExtension(v); if (name.IndexOf(".", StringComparison.Ordinal) > -1) { return(path + "\\" + name.Substring(0, name.IndexOf(".", StringComparison.Ordinal)) + ext); } return(v); }).Distinct().ToList(); var viewData = new List <RazorViewCompilationData>(views.Count); foreach (var view in views) { var viewPaths = razorViewCompiler.GetViewComponentPaths(view, ".cshtml"); var jsPaths = razorViewCompiler.GetViewComponentPaths(view, ".js").Where(p => !p.EndsWith(".test.js")).ToArray(); var cssPaths = razorViewCompiler.GetViewComponentPaths(view, ".less").Union(razorViewCompiler.GetViewComponentPaths(view, ".css")); var viewVirtualPath = view.Substring(inPath.Length + 1); var name = RazorViewCompiler.GetTypeName(viewVirtualPath); var areaStartIndex = viewVirtualPath.IndexOf("areas\\", StringComparison.InvariantCultureIgnoreCase) + 6; var areaName = viewVirtualPath.Substring(areaStartIndex, viewVirtualPath.IndexOf("\\", areaStartIndex) - areaStartIndex); var viewContents = new StringBuilder(); foreach (var viewFile in viewPaths) { using (var reader = new StreamReader(new FileStream(viewFile, FileMode.Open, FileAccess.Read))) { string line; while ((line = reader.ReadLine()) != null) { var trimmedLine = line.Trim(); if (!string.IsNullOrEmpty(trimmedLine)) { if (trimmedLine.IndexOf("@inherits") == -1 && trimmedLine.EndsWith(">")) { viewContents.Append(trimmedLine); } else { viewContents.AppendLine(trimmedLine); } } } } } if (jsPaths.Any()) { var jsBuilder = new StringBuilder(); foreach (var jsFile in jsPaths) { jsBuilder.AppendLine(File.ReadAllText(jsFile)); } viewContents.Insert(0, razorViewCompiler.PrepareJsForRazorCompilation(jsBuilder.ToString(), true)); } if (cssPaths.Any()) { var cssBuilder = new StringBuilder(); foreach (var cssFile in cssPaths) { cssBuilder.AppendLine(File.ReadAllText(cssFile)); } viewContents.Insert(0, razorViewCompiler.PrepareCssForRazorCompilation(cssBuilder.ToString(), areaName)); } viewData.Add(new RazorViewCompilationData { Name = name, ViewContents = viewContents.ToString() }); } razorViewCompiler.CompileAndMergeFiles(viewData, assemblyName); }