有人能告诉我是什么原因导致Squishit在生产模式下重建捆绑包?
例如,如果我创建以下捆绑包,则会按预期创建“Site.Master_ {GUID} .css”文件。
<%= Bundle.Css()
.Add("~/css/reset.css")
.Add("~/css/typography.css")
.Add("~/css/styles.css")
.Add("~/MasterPages/Site.Master.css")
.Render("~/Cache/Site.Master_#.css")
%>
但如果删除文件包文件,则不会重新创建。我通过反复试验发现,如果我将web.config文件更改为
<compilation debug="true" targetFramework="4.0" />
然后回到假
<compilation debug="false" targetFramework="4.0" />
下次请求页面时,会重建捆绑包,但我想知道:
a)Squishit如何决定是否应该建造或重建特定的捆绑
b)如果有一种公认的方法可以重置Squishit来重建所有捆绑包 - 例如在缓存清理或站点更新之后。
感谢。
答案 0 :(得分:7)
SquishIt并不真正决定是否应该构建或重建特定的捆绑包 - 如果SquishIt的缓存中存在捆绑包,则假定该文件仍然存在。这是设计使然,因为每次访问捆绑缓存时检查文件系统都会非常昂贵。
由于捆绑包在HttpRuntime.Cache中缓存,因此您可以通过清除缓存中的相关项来强制重建。添加的所有项目都使用“squishit_”前缀,之后可以使用“css”或“js”来描述资产类型。清除缓存的任何内容都应该导致重建捆绑包,包括站点重置(web.config更改引发的)。如果您需要一种后门方法来在运行时控制它,可以修改this之类的内容以满足您的需求。
另一件会导致重建捆绑包的事情是对其内容中包含的其中一个文件进行更改。当捆绑包最初添加到缓存时,这是通过CacheDependency控制的。