5

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?

+0

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

+0

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

Antwort

2

Nein, Sie verstehen das richtig, die Elementtransformationen werden auf ein Element angewendet, bevor sie gebündelt werden, und dann werden die Bündeltransformationen ausgeführt. Haben Sie überprüft, dass Ihre Transformation aufgerufen wird, wenn Sie dies im Debugger erwarten?

+0

Ja, der Transformer wird als durch einen Breakpoint im Debugger verifiziert aufgerufen. – rheone

+1

Meine derzeitige Vermutung ist, dass die vollständige Bündelung nicht während des Debuggens/dev/local erfolgt und die Ergebnisse ignoriert werden, aber nicht überprüft werden können, da die Quelle noch nicht verfügbar ist. – rheone

+3

Ah ja, Sie sollten angeben, BundleTable.EnableOptimizations = True –

2

Bundle Transformer unterstützt nativ eine automatische Transformation von relativen Pfaden auf absolut im CSS-Code. Ich sage Ihnen als Entwickler dieses Produkts.

+0

Ja, in den meisten Fällen stimmt das. Ich habe jedoch explizite Probleme damit, dass der Pfad falsch ist, da LESS-Ressourcen sich in einem anderen Pfad befinden als das Standard-CSS. (css from less möchte Ressourcen in anderen Pfaden finden) und mit der Verwendung von Subdomains. Daher meine manuelle Transformation des Pfades. – rheone

+0

In [Bundle Transformer 1.7.7 Beta 1] (http://bundletransformer.codeplex.com/releases/view/106114) wurde die Unterstützung der Elementumwandlungen hinzugefügt. Um mit den Elementtransformationen normal arbeiten zu können, müssen Sie standardmäßig die Klasse 'NullBuilder' als Builder verwenden oder die Klassen' CustomStyleBundle' und 'CustomScriptBundle' verwenden. –

+0

Falls sich jemand anders mit der integrierten Unterstützung für die automatische Transformation von relativen Pfaden beschäftigt, lesen Sie diesen Artikel: http://www.seankenny.me/blog/2013/09/04/404-with-relative- Pfade und Web-Optimierungs-Framework / –

Verwandte Themen