2012-10-25 86 views
6

據我所知(因爲坦白地說關於System.Web.Optimization的文檔非常稀少),ASP.NET綁定的方式是註冊一組文件(Javascript或CSS,對應於ScriptBundleStyleBundle),並將它們關聯起來與虛擬路徑;例如,所有jQuery UI腳本的~/bundles/jqueryui。稍後,當您在非調試模式下運行時,ASP.NET可以縮小這些文件,縮小版本將在您爲該包指定的虛擬路徑上提供。ASP.NET捆綁 - 默認虛擬路徑?

默認的捆綁包設置註冊一些腳本捆綁包,其中~/bundles/...作爲虛擬路徑,一些CSS作爲虛擬路徑包含~/Content/css。我的問題是,這不是不一致嗎?有沒有像~/bundles/js/...~/bundles/css/...這樣更有意義?實際上,~/Content目錄實際上是作爲一個真實目錄存在的,所以甚至有名稱衝突的可能性。我以爲你會希望你的虛擬捆綁路徑是默認存在的不是的目錄,並且不打算在實際的文件系統上創建。有什麼理由爲什麼~/Content/css用於我不理解的CSS包虛擬路徑?

回答

7

偉大的問題,和簡短的故事是,一般來說它並不重要。但是,一些腳本文件和CSS依賴於它們在磁盤上的物理位置,因爲它們使用相對路徑來引用其他內容。例如,當您查看新的ASP.NET 4.5項目中的默認jQuery UI包時,您會發現它具有相當長的路徑。這是因爲jQuery的CSS對一些圖像文件有相對引用。爲了正確解決這些問題,路徑很重要,否則諸如「..」之類的東西不會到達正確的父目錄。

+0

謝謝,這個答案似乎可能是微軟這樣做的原因,我沒有想到它。我認爲如果他們使用'〜/ Content/cssBundles'和'〜/ Content/jsBundles'這樣的默認路徑,它會更加一致。 – Jez

+0

@jez我在微軟的MVC團隊工作,所以我知道肯定:) – Eilon

+0

現在有一個CssUrlRewriteTransform來解決這個問題。它會重寫CSS文件中的URL,因此它們與虛擬目錄相關,而不是原始目錄;這樣,儘管有CSS文件的新位置,它仍然可以在原始目錄中找到這些文件。 – Triynko