我目前正在开发一个项目,该项目使用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()
. 我在这里做错了什么还是确实是一个错误?