2012-10-25 4 views
6

Soweit ich das beurteilen kann (da die Dokumentation zu System.Web.Optimization sehr spärlich ist), funktioniert die Bündelung in ASP.NET so, dass Sie eine Reihe von Dateien (Javascript oder CSS, entsprechend ScriptBundle und StyleBundle) registrieren und zuordnen mit einem virtuellen Pfad; Beispiel: ~/bundles/jqueryui für alle jQuery-UI-Skripts. Später kann ASP.NET diese Dateien minimieren, wenn Sie im Nicht-Debug-Modus ausgeführt werden, und die verkleinerte Version wird in dem virtuellen Pfad verfügbar gemacht, den Sie für das Bundle angegeben haben.ASP.NET-Bündelung - virtuelle Standardpfade?

Das Standard-Bundle-Setup registriert einige Script-Bundles mit ~/bundles/... als virtuellen Pfad und einige CSS mit ~/Content/css als den virtuellen Pfad. Meine Frage ist, ist das nicht inkonsequent? Wäre es nicht sinnvoller, etwas wie ~/bundles/js/... und ~/bundles/css/... zu haben? Tatsächlich existiert das Verzeichnis ~/Content tatsächlich als echtes Verzeichnis, daher besteht sogar die Gefahr einer Namenskollision. Ich hätte gedacht, dass Sie möchten, dass Ihre virtuellen Bundle-Pfade Verzeichnisse sind, die nicht standardmäßig vorhanden sind und nicht auf dem tatsächlichen Dateisystem erstellt werden sollen. Gibt es einen Grund, warum ~/Content/css für die virtuellen Pfade des CSS-Pakets verwendet wird, die ich nicht verstehe?

Antwort

7

Große Frage, und die kurze Geschichte ist, dass es im Allgemeinen überhaupt keine Rolle spielt. Einige Skriptdateien und CSS hängen jedoch von ihrem physischen Speicherort auf der Festplatte ab, da sie relative Pfade verwenden, um auf andere Inhalte zu verweisen. Wenn Sie beispielsweise das standardmäßige jQuery-UI-Bundle im neuen ASP.NET 4.5-Projekt betrachten, sehen Sie, dass es einen ziemlich langen Pfad aufweist. Das liegt daran, dass jQuerys CSS relative Verweise auf einige Bilddateien hat. Um diese korrekt aufzulösen, sind die Pfade wichtig, sonst gehen Dinge wie ".." nicht in das richtige übergeordnete Verzeichnis.

+0

Danke, diese Antwort scheint wahrscheinlich der Grund zu sein, warum Microsoft es getan hat und ich hatte nicht daran gedacht. Ich denke, es wäre konsistenter, wenn sie Standardpfade von etwas wie '~/Content/cssBundles' und' ~/Content/jsBundles' verwendet hätten. – Jez

+0

@jez Ich arbeite bei Microsoft im MVC-Team, also weiß ich es sicher :) – Eilon

+0

Es gibt jetzt ein CssUrlRewriteTransform, um dieses Problem zu lösen. Dadurch werden die URLs in Ihren CSS-Dateien neu geschrieben, sodass sie sich auf das virtuelle Verzeichnis und nicht auf das ursprüngliche Verzeichnis beziehen. Auf diese Weise kann die Datei trotz des neuen Speicherortes der CSS-Datei im ursprünglichen Verzeichnis gefunden werden. – Triynko