2012-10-25 29 views
6

जहां तक ​​मैं कह सकता हूं (क्योंकि System.Web.Optimization पर स्पष्ट रूप से प्रलेखन बहुत स्पैस है), एएसपी.नेट में काम करने का तरीका यह है कि आप फाइलों का एक सेट पंजीकृत करते हैं (जावास्क्रिप्ट या सीएसएस, ScriptBundle और StyleBundle के साथ), और उन्हें संबद्ध करें एक आभासी पथ के साथ; उदाहरण के लिए, सभी jQuery UI स्क्रिप्ट के लिए ~/bundles/jqueryui। बाद में, जब आप गैर-डीबग मोड में चल रहे हों तो ASP.NET इन फ़ाइलों को छोटा कर सकता है, और minified संस्करण को बंडल के लिए निर्दिष्ट वर्चुअल पथ पर उपलब्ध कराया जाएगा।एएसपी.नेट बंडलिंग - डिफ़ॉल्ट वर्चुअल पथ?

डिफ़ॉल्ट बंडल सेटअप वर्चुअल पथ के रूप में ~/bundles/... के साथ कुछ स्क्रिप्ट बंडल पंजीकृत करता है, और कुछ सीएसएस वर्चुअल पथ के रूप में ~/Content/css के साथ पंजीकृत करता है। मेरा सवाल है, यह असंगत नहीं है? ~/bundles/js/... और ~/bundles/css/... जैसे कुछ ऐसा करने के लिए और अधिक समझदारी नहीं होगी? वास्तव में, ~/Content निर्देशिका वास्तव में एक वास्तविक निर्देशिका के रूप में मौजूद है, इसलिए नाम टक्कर का भी मौका है। मैंने सोचा होगा कि आप अपने आभासी बंडल पथ निर्देशिकाओं के लिए चाहते हैं कि डिफ़ॉल्ट रूप से मौजूद नहीं है, और वास्तविक फाइल सिस्टम पर बनाए जाने के लिए नहीं हैं। क्या कोई कारण है कि ~/Content/css का उपयोग सीएसएस बंडल वर्चुअल पथ के लिए किया जाता है जिसे मैं समझ नहीं पा रहा हूं?

उत्तर

7

महान प्रश्न, और छोटी कहानी यह है कि सामान्य रूप से इससे कोई फर्क नहीं पड़ता। हालांकि, कुछ स्क्रिप्ट फ़ाइलें और सीएसएस डिस्क पर उनके भौतिक स्थान पर निर्भर करती हैं क्योंकि वे अन्य सामग्री के संदर्भ में सापेक्ष पथ का उपयोग करते हैं। उदाहरण के लिए, आप नए एएसपी.NET 4.5 प्रोजेक्ट में डिफ़ॉल्ट jQuery UI बंडल को देखते हैं, जिसे आप देखते हैं कि इसका एक लंबा रास्ता है। ऐसा इसलिए है क्योंकि jQuery के सीएसएस में कुछ छवि फ़ाइलों के सापेक्ष संदर्भ हैं। उनको सही तरीके से हल करने के लिए पथों को हल करने के लिए या अन्यथा ".." जैसी चीजें सही मूल निर्देशिका तक नहीं जाएंगी।

+0

धन्यवाद, यह उत्तर माइक्रोसॉफ्ट ने ऐसा करने की वजह से देखा है और मैंने इसके बारे में सोचा नहीं था। मुझे लगता है कि अगर यह '~/Content/cssBundles' और' ~/content/jsBundles' जैसी किसी चीज़ के डिफ़ॉल्ट पथ का उपयोग करता है तो यह अधिक संगत होगा। – Jez

+0

@jez मैं माइक्रोसॉफ्ट में एमवीसी टीम पर काम करता हूं इसलिए मुझे यह सुनिश्चित करने के लिए पता है :) – Eilon

+0

इस समस्या को हल करने के लिए अब एक CssUrlRewriteTransform है। यह आपकी सीएसएस फ़ाइलों में यूआरएल को फिर से लिख देगा, इसलिए वे मूल निर्देशिका की बजाय आभासी निर्देशिका के सापेक्ष हैं; इस तरह, यह सीएसएस फ़ाइल के नए स्थान के बावजूद मूल निर्देशिका में फ़ाइलों को पा सकता है। – Triynko