6

我目前正在开发一个项目,该项目使用ASP.NET Web 优化库(v 1.1.0-Beta1)和Bundle Transformer扩展(v 1.7.3-Beta1 用于核心,1.7.0-Beta1 用于 LESS)用于将 LESS 转换为 CSS。基于 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);
}

IItemTransform 的实现:

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

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

4

2 回答 2

3

不,您没有正确理解这一点,项目转换在捆绑在一起之前应用于项目,然后运行捆绑转换。当您期望在调试器中时,您是否已验证它正在调用您的转换?

于 2013-04-30T16:12:41.993 回答
3

Bundle Transformer 原生支持将相对路径自动转换为 CSS 代码中的绝对路径。我是作为这个产品的开发者告诉你的。

于 2013-05-02T16:18:15.310 回答