6

谁能告诉我是什么原因/触发 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 以重建所有捆绑包 - 例如在缓存清除或站点更新之后。

谢谢。

4

1 回答 1

8

SquishIt 并不真正决定是否应该构建或重建特定的包 - 如果 SquishIt 的缓存中存在包,它假定文件仍然存在。这是设计使然,因为每次访问捆绑缓存时检查文件系统会变得非常昂贵。

因为捆绑包缓存在 HttpRuntime.Cache 中,您可以通过从缓存中清除相关项目来强制重建。所有添加的项目都使用“squishit_”前缀,之后可以使用“css”或“js”来描述资产类型。清除缓存的任何内容都应导致重新构建捆绑包,包括站点重置(您的 web.config 更改会触发)。如果您需要一种在运行时控制它的后门方法,可以修改类似的内容以满足您的需求。

会导致重新构建包的另一件事是更改其内容中包含的文件之一。当捆绑包最初添加到缓存中时,这是通过 CacheDependency 控制的。

于 2013-01-09T16:40:37.293 回答