... ya da endişelenmeyi bırakıp Microsoft'tan tamamen belgelenmemiş API'lere karşı kod yazmayı nasıl öğrendim . Resmi System.Web.Optimization
sürümün gerçek bir dokümantasyonu var mı ? Çünkü hiçbirini bulamıyorum, XML dokümanı yok ve tüm blog yazıları büyük ölçüde farklı olan RC API'ye atıfta bulunuyor. Her neyse ..
Javascript bağımlılıklarını otomatik olarak çözmek için bazı kodlar yazıyorum ve bu bağımlılıklardan anında paketler oluşturuyorum. Uygulamayı yeniden başlatmadan komut dosyalarını düzenlerseniz veya bir paketi etkileyecek değişiklikler yapmazsanız, her şey harika çalışır, değişiklikler yansıtılmaz. Bu yüzden, geliştirmede kullanmak üzere bağımlılıkların önbelleğe alınmasını devre dışı bırakma seçeneği ekledim.
Ancak, görünüşe göre paket koleksiyonu değişmiş olsa bileBundleTables
URL'yi önbelleğe alıyor . Örneğin, bir paketi yeniden oluşturmak istediğimde kendi kodumda şöyle bir şey yapıyorum:
// 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"
Aynı takma ada sahip bir paketi kaldırdığımda ve yeniden oluşturduğumda kesinlikle hiçbir şey olmuyor: bundleUrl
geri gönderilenler ResolveBundleUrl
, paketi kaldırıp yeniden oluşturmadan önceki ile aynı. "Aynı" derken, içerik karmasının paketin yeni içeriğini yansıtacak şekilde değiştirilmediğini kastediyorum.
düzenle ... aslında, bundan çok daha kötü. Demeti kendisi her nasılsa dışında önbelleğe alınmış olan Bundles
koleksiyon. Tarayıcının komut dosyasını önbelleğe almasını önlemek için kendi rastgele karmamı oluşturursam, ASP.NET eski komut dosyasını döndürür . Görünüşe göre, bir desteyi çıkarmak BundleTable.Bundles
aslında hiçbir şey yapmıyor.
Bu sorunu aşmak için takma adı basitçe değiştirebilirim ve bu geliştirme için sorun değil, ancak bu fikirden hoşlanmıyorum çünkü bu, her sayfa yüklemeden sonra takma adları kullanımdan kaldırmam veya boyut olarak büyüyen bir BundleCollection her sayfa yüklemesi. Bunu bir üretim ortamında bırakırsanız felaket olur.
Öyle görünüyor ki, bir komut dosyası sunulduğunda, gerçek BundleTables.Bundles
nesneden bağımsız olarak önbelleğe alınır . Dolayısıyla, bir URL'yi yeniden kullanırsanız, bahsettiği paketi yeniden kullanmadan önce kaldırmış olsanız bile, önbelleğindekiyle yanıt verir ve Bundles
nesneyi değiştirmek önbelleği boşaltmaz - bu nedenle yalnızca yeni öğeler (veya bunun yerine, farklı bir ada sahip yeni öğeler) kullanılacaktır.
Davranış tuhaf görünüyor ... Koleksiyondan bir şey kaldırmak onu önbellekten kaldırmalıdır. Ama öyle değil. Bu önbelleği temizlemenin ve BundleCollection
o pakete ilk erişildiğinde önbelleğe aldığı içerik yerine mevcut içeriğini kullanmasının bir yolu olmalıdır .
Bunu nasıl yapacağım hakkında bir fikrin var mı?
Orada bu ResetAll
bilinmeyen bir amacı vardır yöntem ama sadece o değildir ki zaten şeyleri kırar.