>我刚刚在VS 2013 RTM上创建了一个新的MVC 5应用程序。由于某种原因,我的 CSS 文件中的背景图像 url 没有被转换。
因此,为了调试这个问题,我创建了自定义的 CssRewriteUrlTransform 包装器。我发现我的断点没有被调用。
这是我的捆绑配置中的内容.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);
}
}
}
如果您拥有 CSS 的缩小版本,则转换似乎不会运行。删除 .min.css 文件,它应该开始工作。
我有同样的问题。 Сlass CssRewriteUrlTransform不能像我需要的那样工作。我查看了源代码AspNetWebOptimization,发现当Bundle找到带有".min"的文件时,它会创建一个新的BundleFile,而不从原始BundleFile进行转换。最好的解决方案是关闭这些捆绑包的文件扩展名替换:
var bundle = new StyleBundle("~/bundles/css/font-awesome")
.Include("~/Content/font-awesome.css", new CssRewriteUrlTransform());
bundle.EnableFileExtensionReplacements = false;
bundles.Add(bundle);
把它作为注释放在标记的答案下。但我没有权利这样做。答案帮助了我。我还找到了另一种解决方案。在捆绑包配置方法中添加以下内容:
- BundleTable.Bundles.FileExtensionReplacementList.Clear();
这将避免自动包含 *.min.css 文件。并且将调用转换。
问候汉斯