Подтвердить что ты не робот

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

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

Ответ 1

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

Ответ 2

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

  • BundleTable.Bundles.FileExtensionReplacementList.Clear();

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

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

Ответ 3

У меня та же проблема. Класс 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);