2012-10-25 19 views
6

O ile wiem (ponieważ dokumentacja na System.Web.Optimization jest bardzo rzadka), sposób w jaki pakiet działa w ASP.NET polega na tym, że rejestrujesz zestaw plików (JavaScript lub CSS, odpowiadający ScriptBundle i StyleBundle) i powiążesz je z wirtualną ścieżką; na przykład ~/bundles/jqueryui dla wszystkich skryptów jQuery UI. Później program ASP.NET może zminimalizować te pliki, gdy uruchomiony jest tryb inny niż debugowanie, a wersja minified zostanie udostępniona w ścieżce wirtualnej określonej dla pakunku.Powiązanie ASP.NET - domyślne ścieżki wirtualne?

Domyślna konfiguracja pakunku rejestruje niektóre pakiety skryptów z ~/bundles/... jako ścieżkę wirtualną, a niektóre z CSS z ~/Content/css jako ścieżką wirtualną. Moje pytanie brzmi, czy to nie jest niespójne? Czy nie ma większego sensu posiadanie czegoś takiego jak ~/bundles/js/... i ~/bundles/css/...? W rzeczywistości katalog ~/Content faktycznie istnieje jako prawdziwy katalog, więc istnieje nawet ryzyko kolizji nazwy. Sądziłem, że chcesz, aby ścieżki wirtualnych pakietów były katalogami, które domyślnie nie istnieją i nie mają być tworzone w rzeczywistym systemie plików. Czy jest jakiś powód, dla którego ~/Content/css jest używany dla wirtualnych ścieżek pakietów CSS, których nie rozumiem?

Odpowiedz

7

Świetne pytanie, a opowiadanie jest takie, że w ogóle nie ma to żadnego znaczenia. Jednak niektóre pliki skryptów i CSS zależą od ich fizycznej lokalizacji na dysku, ponieważ używają względnych ścieżek do odwoływania się do innych treści. Na przykład możesz spojrzeć na domyślny pakiet jQuery UI w nowym projekcie ASP.NET 4.5, który ma dość długą ścieżkę. To dlatego, że CSS jQuery ma względne odniesienia do niektórych plików graficznych. Aby je poprawnie rozwiązać, ważne są ścieżki, a rzeczy takie jak ".." nie przejdą do właściwego katalogu nadrzędnego.

+0

Dzięki, ta odpowiedź wydaje się być prawdopodobnie powodem, dla którego Microsoft to zrobił i nie pomyślałam o tym. Myślę, że byłoby bardziej spójne, gdyby użyli domyślnych ścieżek czegoś takiego jak '~/Content/cssBundles' i' ~/Content/jsBundles'. – Jez

+0

@jez Pracuję w Microsoft w zespole MVC, więc wiem to na pewno :) – Eilon

+0

Istnieje CssUrlRewriteTransform teraz, aby rozwiązać ten problem. Przepisuje adresy URL w plikach CSS, więc są one względne względem katalogu wirtualnego, a nie oryginalnego katalogu; w ten sposób może znaleźć pliki w oryginalnym katalogu pomimo nowej lokalizacji pliku CSS. – Triynko

Powiązane problemy