internal static string Process(ref IEnumerable <BundleFile> files) { DotlessConfiguration lessConfig = new WebConfigConfigurationLoader().GetConfiguration(); if (!lessConfig.LessSource.GetInterfaces().Contains(typeof(IFileReaderWithResolver))) { lessConfig.LessSource = typeof(LessVirtualFileReader); } // system.Web.Optimization cache is used instead lessConfig.CacheEnabled = false; var content = new StringBuilder(); var targetFiles = new List <BundleFile>(); foreach (BundleFile bundleFile in files) { // initialize the less engine once for each file. // this is to prevent leaking state between files ILessEngine lessEngine = LessWeb.GetEngine(lessConfig); LessEngine underlyingLessEngine = lessEngine.ResolveLessEngine(); Parser lessParser = underlyingLessEngine.Parser; targetFiles.Add(bundleFile); string filePath = bundleFile.IncludedVirtualPath; filePath = filePath.Replace('\\', '/'); filePath = VirtualPathUtility.ToAppRelative(filePath); lessParser.SetCurrentFilePath(filePath); string source = bundleFile.ApplyTransforms(); string extension = VirtualPathUtility.GetExtension(filePath); // if plain CSS file, do not transform LESS if (lessConfig.ImportAllFilesAsLess || ".less".Equals(extension, StringComparison.InvariantCultureIgnoreCase) || ".less.css".Equals(extension, StringComparison.InvariantCultureIgnoreCase)) { string lessOutput = lessEngine.TransformToCss(source, filePath); // pass the transformation result if successful if (lessEngine.LastTransformationSuccessful) { source = lessOutput; } else { // otherwise write out error message. // the transformation error is logged in LessEngine.TransformToCss if (lessConfig.Debug) { content.AppendLine(string.Format( "/* Error occurred in LESS transformation of the file: {0}. Please see details in the dotless log */", bundleFile.IncludedVirtualPath)); } continue; } } source = ConvertUrlsToAbsolute(bundleFile.IncludedVirtualPath, source); content.AppendLine(source); BundleFile[] fileDependencies = GetFileDependencies(underlyingLessEngine).ToArray(); targetFiles.AddRange(fileDependencies); DependencyCache.SaveFileDependencies(filePath, fileDependencies.Select(file => file.IncludedVirtualPath).ToArray()); } // include imports in bundle files to register cache dependencies files = BundleTable.EnableOptimizations ? targetFiles.Distinct() : targetFiles; return(content.ToString()); }