CssRewriteUrlTransform не вызывается

Я только что создал новое приложение MVC 5 на VS 2013 RTM. По какой-то причине URL-адрес фонового изображения в моих файлах 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);
        }
    }
}

person Moon    schedule 27.10.2013    source источник
comment
Вы точно знаете, работает ли точно такой же код в MVC4 (VS 2012)?   -  person Alex Dresko    schedule 01.11.2013
comment
Нет. Я никогда не пробовал это с MVC 4. Но это работает с предыдущей версией Web Optimization Framework.   -  person Moon    schedule 03.11.2013
comment
У меня такая же проблема с MVC 4 и веб-оптимизацией v1.1.2.   -  person Randall Sutton    schedule 06.11.2013


Ответы (3)


Похоже, преобразование не запускается, если у вас минимизированная версия CSS. Удалите файл .min.css, и он должен начать работать.

person Randall Sutton    schedule 06.11.2013
comment
Кроме того, вы можете напрямую ссылаться на уменьшенную версию, и преобразование будет работать правильно. - person Chris; 28.01.2014
comment
Спасибо, Рэндалл, не могу поверить, сколько времени я потратил на это впустую :) - person Richard; 27.02.2014
comment
Это сработало для меня и не должно было сработать. Где-нибудь мы можем зарегистрировать отчет об ошибке? - person Rob Lyndon; 16.02.2015
comment
@Chris В качестве альтернативы MS могла бы исправить эту очевидную ошибку. - person A.R.; 08.03.2018
comment
МОЙ БОГ. У меня так долго отсутствовала проблема с глификоном, и я дошел только до этого места stackoverflow.com/questions/31211545/ и сдалось, когда преобразование не сработало. Я не могу поверить, что добавление .min исправило это. Совершенно сумасшедший. - person Nick.McDermaid; 23.04.2019

У меня та же проблема. Класс 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);
person Alieh    schedule 27.04.2018
comment
Я попытался удалить *.min.css, но он все еще задерживается на моей лазури. Но это решение на самом деле избавляет меня от ручного удаления файла. - person Sam; 06.08.2020

Я хотел бы поместить это как комментарий под отмеченным ответом. Но я не имею на это права. Ответ мне помог. Я также нашел другое решение для этого. В методе Bundle-configuration добавьте следующее:

  • Таблица Связок.Связки.СписокЗаменыРасширенияФайла.Очистить();

Это позволит избежать автоматического включения файла *.min.css. И преобразование будет вызвано.

С уважением Ганс

person Hans Kindberg    schedule 27.09.2016
comment
Мне кажется безумием, что такое поведение было реализовано в первую очередь. Я не могу сосчитать, сколько раз меня кусали эти файлы .min по разным причинам. Ваше решение немного экстремально (оно очищает весь список вместо удаления только файлов .min), но на самом деле кажется, что нет общедоступного API для удаления только одного элемента... Так что это лучший способ решить проблему, которую я видел до сих пор. - person youen; 02.02.2017