29

我刚刚在 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);
        }
    }
}
4

3 回答 3

72

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

于 2013-11-06T16:14:31.510 回答
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);
于 2018-04-27T14:11:40.953 回答
5

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

  • BundleTable.Bundles.FileExtensionReplacementList.Clear();

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

问候汉斯

于 2016-09-27T10:08:37.560 回答