... หรือฉันเรียนรู้ที่จะหยุดกังวลและเขียนโค้ดกับ API ที่ไม่มีเอกสารจาก Microsoftได้อย่างไร มีเอกสารSystem.Web.Optimization
เผยแพร่อย่างเป็นทางการจริงหรือไม่? 'เพราะฉันแน่ใจว่าหาไม่พบไม่มีเอกสาร XML และบทความในบล็อกทั้งหมดอ้างถึง RC API ซึ่งแตกต่างกันมาก อันฮู ..
ฉันกำลังเขียนโค้ดเพื่อแก้ไขการอ้างอิงจาวาสคริปต์โดยอัตโนมัติและกำลังสร้างบันเดิลทันทีจากการอ้างอิงเหล่านั้น ทุกอย่างใช้งานได้ดียกเว้นหากคุณแก้ไขสคริปต์หรือทำการเปลี่ยนแปลงอื่น ๆ ที่จะส่งผลต่อบันเดิลโดยไม่ต้องรีสตาร์ทแอปพลิเคชันการเปลี่ยนแปลงจะไม่แสดงผล ดังนั้นฉันจึงเพิ่มตัวเลือกในการปิดใช้งานแคชของการอ้างอิงเพื่อใช้ในการพัฒนา
อย่างไรก็ตามเห็นได้ชัดว่า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
ไม่ได้ทำอะไรเลย
ฉันสามารถเปลี่ยนนามแฝงเพื่อแก้ไขปัญหานี้ได้และนั่นก็โอเคสำหรับการพัฒนา แต่ฉันไม่ชอบแนวคิดนั้นเพราะมันหมายความว่าฉันต้องเลิกใช้นามแฝงหลังจากโหลดแต่ละหน้าหรือมี BundleCollection ที่มีขนาดใหญ่ขึ้น โหลดทุกหน้า หากคุณทิ้งสิ่งนี้ไว้ในสภาพแวดล้อมการผลิตอาจเป็นหายนะ
ดังนั้นดูเหมือนว่าเมื่อมีการใช้สคริปต์สคริปต์จะถูกแคชโดยไม่ขึ้นกับBundleTables.Bundles
วัตถุจริง ดังนั้นหากคุณใช้ URL ซ้ำแม้ว่าคุณจะลบบันเดิลที่อ้างถึงก่อนที่จะนำกลับมาใช้ใหม่ แต่ก็ตอบสนองด้วยสิ่งที่อยู่ในแคชและการแก้ไขBundles
อ็อบเจ็กต์จะไม่ล้างแคชดังนั้นเฉพาะรายการใหม่ (หรือ แต่จะมีการใช้รายการใหม่ที่มีชื่ออื่น)
ลักษณะการทำงานดูเหมือนแปลก ... การลบบางสิ่งออกจากคอลเล็กชันควรลบออกจากแคช แต่มันไม่ได้ ต้องมีวิธีล้างแคชนี้และให้ใช้เนื้อหาปัจจุบันของBundleCollection
แคชแทนสิ่งที่แคชไว้เมื่อเข้าถึงกลุ่มนั้นครั้งแรก
มีความคิดอย่างไรที่ฉันจะทำสิ่งนี้?
มีResetAll
วิธีนี้ซึ่งมีจุดประสงค์ที่ไม่ทราบสาเหตุ แต่มันก็ทำลายสิ่งต่างๆอยู่ดี