1

我在我的 MVC 应用程序中使用引导程序较少。为了减少捆绑和缩小,我使用 LessBundle ( https://github.com/scott-xu/System.Web.Optimization.Less )

var bundle = new LessBundle("~/css/home").Include(
            "~/_globalresources/Css/language.less");

LessBundle 正在工作,但在解析 CSS 中的图像 url 时遇到问题。所有图片网址都不正确。所以,我在这种情况下应用 CssRewriteUrlTransform 但失败了。所有图片网址也不正确。

var bundle = new LessBundle("~/css/home").Include(
            "~/_globalresources/Css/language.less", new CssRewriteUrlTransform());

我尝试使用 StyleBundle 而不是 LessBundle 来重新检查 CssRewriteUrlTransform 并且所有图像 url 都得到了很好的解析。

var bundle = new StyleBundle("~/css/home").Include(
                "~/_globalresources/Css/language.less", new CssRewriteUrlTransform());

我认为,同时使用 LessBundle 和 CssRewriteUrlTransform 会给出不正确的结果。

请帮助我解决我的问题以归档我的目的:少捆绑并解析图片网址。谢谢。

4

1 回答 1

0

我解决了我的问题。下载 LessTransform 并像这样修复它:

public void Process(BundleContext context, BundleResponse bundle)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }

            if (bundle == null)
            {
                throw new ArgumentNullException("bundle");
            }

            context.HttpContext.Response.Cache.SetLastModifiedFromFileDependencies();

            var lessParser = new Parser();
            var lessEngine = this.CreateLessEngine(lessParser);

            var content = new StringBuilder(bundle.Content.Length);

            var bundleFiles = new List<BundleFile>();

            foreach (var bundleFile in bundle.Files)
            {
                bundleFiles.Add(bundleFile);
                var filePath = bundleFile.IncludedVirtualPath;
                filePath = filePath.Replace('\\', '/');
                if (filePath.StartsWith("~"))
                {
                    filePath = VirtualPathUtility.ToAbsolute(filePath);
                }

                if (filePath.StartsWith("/"))
                {
                    filePath = HostingEnvironment.MapPath(filePath);
                }

                this.SetCurrentFilePath(lessParser, filePath);
                var source = File.ReadAllText(filePath);
                var transformContent = lessEngine.TransformToCss(source, filePath);
                foreach (var transform in bundleFile.Transforms)
                {
                    transformContent = transform.Process(bundleFile.IncludedVirtualPath, transformContent);
                }

                content.Append(transformContent);
                content.AppendLine();

                bundleFiles.AddRange(this.GetFileDependencies(lessParser, bundleFile.VirtualFile));
            }

            if (BundleTable.EnableOptimizations)
            {
                // include imports in bundle files to register cache dependencies
                bundle.Files = bundleFiles.Distinct();
            }

            bundle.ContentType = "text/css";
            bundle.Content = content.ToString();
        }

Resolving images works well.

于 2013-10-07T09:23:16.843 回答