未调用CssRewriteUrlTransform

Moo*_*oon 27 asp.net-mvc web-optimization asp.net-mvc-5

我刚刚在VS 2013 RTM上创建了一个新的MVC 5应用程序.出于某种原因,我的CSS文件中的背景图片网址没有被转换.

因此,为了调试该问题,我创建了自定义CssRewriteUrlTransform包装器.我发现我的断点没有被调用.

这就是我在BundleConfig.cs中的内容

using System.Web.Optimization;

namespace Utilities.Web
{
    public class BundleConfig
    {
        private const string JQUERY_CDN_URL = "//code.jquery.com/jquery-1.10.1.min.js";

        public static void RegisterBundles(BundleCollection bundles)
        {
            bundles.UseCdn = true;
            BundleTable.EnableOptimizations = true;

            bundles.Add(new StyleBundle("~/css/coming-soon")
                .Include("~/Content/Site/coming-soon.css",
                    new CssRewriteUrlTransformWrapper()));

            bundles.Add(new ScriptBundle("~/js/coming-soon")
                .Include("~/Scripts/jquery.placeholder.js")
                .Include("~/Scripts/Site/coming-soon.js"));

            bundles.Add(new ScriptBundle("~/js/jquery", JQUERY_CDN_URL)
            {
                CdnFallbackExpression = "window.jQuery"
            }.Include("~/Scripts/jquery-{version}.js"));
        }
    }

    public class CssRewriteUrlTransformWrapper : IItemTransform
    {
        public string Process(string includedVirtualPath, string input)
        {
            return new CssRewriteUrlTransform().Process(includedVirtualPath, input);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

Ran*_*ton 70

如果你有CSS的缩小版本,似乎转换不会运行.删除.min.css文件,它应该开始工作.

  • 或者,您可以直接引用缩小版本,并且转换似乎正确运行. (10认同)
  • 谢谢兰德尔,我简直不敢相信我浪费了多少时间:) (4认同)
  • 希望我可以100次投票! (4认同)

Ali*_*h S 6

我也有同样的问题。?lass CssRewriteUrlTransform 不能按我的需要工作。我查看了AspNetWebOptimization的源代码,发现当 Bundle 找到一个带有“.min”的文件时,它会创建一个新的 BundleFile,而不是从原始 BundleFile 进行转换。最好的解决方案是关闭这些包的 FileExtensionReplacement:

var bundle = new StyleBundle("~/bundles/css/font-awesome")
    .Include("~/Content/font-awesome.css", new CssRewriteUrlTransform());
bundle.EnableFileExtensionReplacements = false;
bundles.Add(bundle);
Run Code Online (Sandbox Code Playgroud)


Han*_*erg 5

我希望将其作为带标记的答案下的评论。但是我没有这样做的权利。答案帮助了我。我也找到了另一种解决方案。在捆绑配置方法中添加以下内容:

  • BundleTable.Bundles.FileExtensionReplacementList.Clear();

这样可以避免* .min.css文件自动包含在内。然后将调用转换。

问候汉斯