Ich arbeite derzeit an einem Projekt, das die ASP.NET Web Optimization-Bibliothek (v 1.1.0-Beta1) in Verbindung mit der Bundle Transformer-Erweiterung (v 1.7.3-Beta1 für Kern, 1.7.0-Beta1 für LESS) verwendet, die verwendet wird um LESS in CSS zu konvertieren. Basierend auf Web-Suchen scheinen Pfade innerhalb von CSS (und weniger) ein häufiges Problem zu sein, in den meisten Fällen wird empfohlen, das CSS manuell zu modifizieren und damit fertig zu werden. Aufgrund der Unterschiede zwischen unserer Entwicklungs- und Produktionsumgebung, und nicht besitzen der betroffenen CSS eine solche Lösung ist nicht machbar.Was ist die korrekte Verwendung von IItemTransform zum Korrigieren von Pfaden in CSS-Bündelung mit ASP.NET Web Optimization und BundleTransformer?
Zwei Lösungen scheinen zu existieren. Die erste besteht darin, das durch die Bündelung definierte virtuelle Verzeichnis über das tatsächliche Verzeichnis zu legen, das den Inhalt enthält. Für mich scheint das eine schlechte Wahl zu sein.
Zweitens, und der Weg, den ich gewählt habe, ist ein IItemTransform
zu verwenden, wie CssRewriteUrlTransform
(in this post erwähnt. Auch diese Lösung hat es limitations ist. Als solche habe ich versucht habe meine eigene ItemTransformer
zu schreiben, aber es scheint, dass die Ergebnisse es wird die Ausführung, wenn auf die folgende Weise verwendet ignoriert:
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);
}
Implementierung von IItemTransform:
public class RewriteUrlTransform : IItemTransform
{
public string Process(string includedVirtualPath, string input)
{
return (input manipulated with proper path replacing bad path)
}
}
wenn ich nicht völlig Misun bin Um zu verstehen, wie ein IItemTransform
verwendet werden soll, was aufgrund mangelnder Dokumentation durchaus möglich ist, würde ich denken, dass die Rückkehr der Process-Methode das neue nachbearbeitete CSS ist. Die Rendite scheint jedoch ignoriert zu werden. Der ursprüngliche Eingang wird immer verwendet, auch wenn ich eine String.Empty()
zurücksende. Mache ich hier etwas falsch oder ist es tatsächlich ein Käfer?
Außerdem habe ich [Casset] (http://getcassette.net/) untersucht und festgestellt, dass es keine gute Lösung für meine Bedürfnisse ist, da es sich nicht dazu eignet, mehrere Bundles zu erstellen und sie explizit anzufordern zu verschiedenen Zeiten während des Seitenrenderings. – rheone
Sie hatten unter Informationsmangel gelitten, aber ich habe diese Frage wegen ihres Titels gestellt. Der Punkt ist, dass es einige Probleme mit der Logik im ursprünglichen 'StyleBundle' gibt, wenn es sich um relative Pfade in virtuellen Verzeichnissen handelt (und ein paar andere Dinge) und [ProperStyleBundle] (http://stackoverflow.com/a/27890912/551322) ist was ich mir ausgedacht habe. – nrodic