... या मैंने चिंता करना कैसे बंद कर दिया और Microsoft से पूरी तरह से अनजाने एपीआई के खिलाफ कोड लिखना सीख लिया । क्या आधिकारिक System.Web.Optimization
रिलीज का कोई वास्तविक दस्तावेज है ? 'cuz मुझे यकीन है कि कोई भी नहीं मिल सकता है, कोई XML डॉक्स नहीं है, और सभी ब्लॉग पोस्ट आरसी एपीआई को संदर्भित करते हैं जो काफी अलग है। Anyhoo ..
मैं जावास्क्रिप्ट निर्भरता को स्वचालित रूप से हल करने के लिए कुछ कोड लिख रहा हूं और उन निर्भरताओं से मक्खी पर बंडल बना रहा हूं। सब कुछ बहुत अच्छा काम करता है, सिवाय इसके कि यदि आप स्क्रिप्ट्स को संपादित करते हैं या अन्यथा परिवर्तन करते हैं जो कि एप्लिकेशन को पुनरारंभ किए बिना एक बंडल को प्रभावित करेगा, तो परिवर्तन प्रतिबिंबित नहीं होंगे। इसलिए मैंने विकास में उपयोग के लिए निर्भरता के कैशिंग को अक्षम करने का विकल्प जोड़ा।
हालांकि, जाहिरा तौर BundleTables
पर URL को कैश किया जाता है भले ही बंडल संग्रह बदल गया हो । उदाहरण के लिए, अपने स्वयं के कोड में जब मैं एक बंडल को फिर से बनाना चाहता हूं तो मैं ऐसा कुछ करता हूं:
// remove an existing bundle
BundleTable.Bundles.Remove(BundleTable.Bundles.GetBundleFor(bundleAlias));
// recreate it.
var bundle = new ScriptBundle(bundleAlias);
// dependencies is a collection of objects representing scripts,
// this creates a new bundle from that list.
foreach (var item in dependencies)
{
bundle.Include(item.Path);
}
// add the new bundle to the collection
BundleTable.Bundles.Add(bundle);
// bundleAlias is the same alias used previously to create the bundle,
// like "~/mybundle1"
var bundleUrl = BundleTable.Bundles.ResolveBundleUrl(bundleAlias);
// returns something like "/mybundle1?v=hzBkDmqVAC8R_Nme4OYZ5qoq5fLBIhAGguKa28lYLfQ1"
जब भी मैं एक ही उपनाम के साथ एक बंडल को हटाता हूं और पुन: बनाता हूं , तो कुछ भी नहीं होता है: इससे पहले कि मैंने हटाया और बंडल को फिर से बनाया, उसी तरह bundleUrl
से लौटाया गया ResolveBundleUrl
। "वही" से मेरा मतलब है कि बंडल की नई सामग्री को प्रतिबिंबित करने के लिए सामग्री हैश अपरिवर्तित है।
संपादित करें ... वास्तव में, यह उससे भी बदतर है। बंडल ही किसी भी तरह के बाहर कैश किया गया है Bundles
संग्रह। यदि मैं केवल स्क्रिप्ट को कैशिंग करने से रोकने के लिए अपना खुद का रैंडम हैश उत्पन्न करता हूं, तो ASP.NET पुरानी स्क्रिप्ट लौटाता है । तो, जाहिरा तौर पर, एक बंडल को हटाने से BundleTable.Bundles
वास्तव में कुछ भी नहीं होता है।
मैं बस इस समस्या के आसपास आने के लिए उपनाम बदल सकता हूं, और यह विकास के लिए ठीक है, लेकिन मुझे यह विचार पसंद नहीं है क्योंकि इसका मतलब है कि या तो मुझे प्रत्येक पृष्ठ लोड के बाद उपनामों को हटाना होगा, या एक बंडलकॉलिनेशन करना होगा जो आकार में बढ़ता है हर पृष्ठ लोड। यदि आपने इसे उत्पादन के माहौल में छोड़ दिया, तो यह एक आपदा होगी।
इसलिए ऐसा लगता है कि जब कोई स्क्रिप्ट परोसी जाती है, तो वह वास्तविक BundleTables.Bundles
वस्तु से स्वतंत्र हो जाती है । इसलिए यदि आप किसी URL का पुनः उपयोग करते हैं, भले ही आपने वह बंडल हटा दिया हो, जिसे उसने पुन: उपयोग करने से पहले संदर्भित किया था, तो यह उसके कैश में जो कुछ भी है, उसका जवाब देता है, और Bundles
ऑब्जेक्ट को बदलकर कैश को फ्लश नहीं करता है - इसलिए केवल नए आइटम (या बल्कि, एक अलग नाम के साथ नई वस्तुओं) कभी भी इस्तेमाल किया जाएगा।
व्यवहार अजीब लगता है ... संग्रह से कुछ निकालकर इसे कैश से निकालना चाहिए। लेकिन यह नहीं है। इस कैश को फ्लश करने का एक तरीका होना चाहिए और BundleCollection
जब यह पहली बार एक्सेस किया गया था , तो इसके बजाय यह कैश्ड की वर्तमान सामग्री का उपयोग करेगा ।
किसी भी विचार मैं यह कैसे करूँगा?
यह एक ResetAll
विधि है जिसका कोई अज्ञात उद्देश्य है लेकिन यह अभी भी चीजों को तोड़ता है इसलिए ऐसा नहीं है।