【问题标题】:CssRewriteUrlTransform is not being called没有调用 CssRewriteUrlTransform
【发布时间】:2013-11-06 07:09:06
【问题描述】:

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

因此,为了调试问题,我创建了自定义 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);
        }
    }
}

【问题讨论】:

  • 您确定完全相同的代码是否适用于 MVC4 (VS 2012)?
  • 没有。我从未在 MVC 4 中尝试过。但它确实适用于以前版本的 Web 优化框架。
  • 我在使用 MVC 4 和 Web Optimization v1.1.2 时遇到了同样的问题

标签: asp.net-mvc asp.net-mvc-5 web-optimization


【解决方案1】:

我也有同样的问题。 С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);

【讨论】:

  • 我试图删除 *.min.css 但它仍然在我的天蓝色上徘徊。但这个解决方案实际上使我免于手动删除文件。
【解决方案2】:

我希望将此作为评论放在标记的答案下。但我没有权利这样做。答案对我有帮助。我还找到了另一种解决方案。在 Bundle-configuration 方法中添加:

  • BundleTable.Bundles.FileExtensionReplacementList.Clear();

这将避免自动包含 *.min.css 文件。并且转换将被调用。

问候汉斯

【讨论】:

  • 对我来说似乎很疯狂,首先实现了这种行为。由于各种原因,我数不清有多少次被这些 .min 文件咬伤。您的解决方案有点极端(它清除了完整列表,而不是仅删除 .min 文件),但实际上似乎没有公共 API 可以仅删除一个元素......所以这是解决问题的最佳方法我'到目前为止见过。
【解决方案3】:

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

【讨论】:

  • 或者,您可以直接引用缩小版本,并且转换似乎可以正常运行。
  • 谢谢 Randall,我不敢相信我在这件事上浪费了多少时间 :)
  • 这对我有用,不应该这样做。有什么地方可以记录错误报告吗?
  • @Chris 或者,MS 可以修复这个明显的错误。
  • 天啊。我一直有一个缺少字形图标的问题,我只到这里stackoverflow.com/questions/31211545/… 并在 trannsform 不起作用时放弃了。我不敢相信添加 .min 解决了这个问题。完全疯了。
猜你喜欢
  • 2015-08-06
  • 2016-07-11
  • 2015-02-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-12-09
  • 2014-11-28
  • 2013-08-11
相关资源
最近更新 更多