使用ASP.NET Web Optimization和BundleTransformer来正确使用IItemTransform来纠正CSS捆绑中的路径是什么?

rhe*_*one 5 web-optimization asp.net-mvc-4 bundling-and-minification asp.net-optimization bundletransformer

我目前正在开发一个项目,该项目使用ASP.NET Web Optimization库(v 1.1.0-Beta1)和Bundle Transformer扩展(v 1.7.3-Beta1用于核心,1.7.0-Beta1用于LESS)用于将LESS转换为CSS.基于Web搜索,CSS(及更少)中的路径似乎是一个常见问题,在大多数情况下,建议手动修改CSS并完成它.但是,由于我们的开发和生产环境之间的差异,并且没有拥有受影响的CSS,这样的解决方案是不可行的.

似乎存在两种解决方案.第一种是将捆绑定义的虚拟目录覆盖在包含内容的实际目录上.对我来说,这似乎是一个糟糕的选择.

其次,我选择的路线是使用IItemTransform这样的CssRewriteUrlTransform(在这篇文章中提到.即使这个解决方案也有它的局限性.因此我试图编写自己的ItemTransformer但是看起来它的执行结果被忽略了以下列方式使用时:

public static void RegisterBundles(BundleCollection bundles)
{
    /* among other work pass in IItemTransformer to fix paths */
    var styleBundle = new StyleBundle("~/bundles/css/styles")
        .Include(...)
        .Include("~/Content/less/font-awesome.less", new RewriteUrlTransform())
        .Include(...);

    styleBundle.Transforms.Add(new CssTransformer());
    styleBundle.Orderer = new NullOrderer();

    bundles.Add(styleBundle);
}
Run Code Online (Sandbox Code Playgroud)

IItemTransform的实现:

public class RewriteUrlTransform : IItemTransform
{
    public string Process(string includedVirtualPath, string input)
    {
        return (input manipulated with proper path replacing bad path)
    }
}
Run Code Online (Sandbox Code Playgroud)

除非我完全误解了如何IItemTransform使用,这很可能是由于缺少文档,我认为Process方法的返回是新的后处理CSS.但是,回报似乎被忽略了.原始输入始终在使用中,即使我返回时也是如此String.Empty().我在这里做错了还是确实是个错误?

Hao*_*ung 3

不,您理解正确,项目转换在将项目捆绑在一起之前应用于项目,然后运行捆绑转换。您是否已验证它是否在调试器中按预期调用您的转换?

  • 啊是的,你应该指定 BundleTable.EnableOptimizations = true (3认同)