我有一個類似的問題;您可以設置IIS爲CSS文件添加content-expiration header,以便它們永遠不會被緩存,也可以使用此SO問題中提供的解決方案here
您還可以爲每個頁面添加一個方法以通過在page.header(!甚至在你Master.Page)的控制做這樣的事情:
protected override void OnPreRender(System.EventArgs e)
{
foreach (Control link in Page.Header.Controls)
{
if (link is HtmlLink)
{
HtmlLink cssLink = link as HtmlLink;
//Check if CSS link
if (cssLink.Attributes["type"].Equals("text/css", StringComparison.CurrentCultureIgnoreCase))
{
if (cssLink.Attributes["href"].Equals(String.Format("~/App_Themes/{0}/{0}.css", Page.Theme), StringComparison.CurrentCultureIgnoreCase))
{
//perhaps add the version of your app here.
cssLink.Attributes["href"] += "?v1.1";
}
}
}
}
base.OnPreRender(e);
}
另一種技術將包括主題名稱版本號 - 例如MyTheme1_1或相似。然後每個版本都會從「新」url加載內容,因此應該爲每個用戶再次請求內容。顯然,這是更多的工作,但應該是每個發佈一次,並沒有你在下面提到的開銷。
有趣,但每一頁的CPU成本太高,每次都是永遠,只是爲了一次更新。 – Aristos
@Aristos然後我唯一能想到的就是將主題名稱中的應用版本號。至少每個版本都會使用每個主題的獨特版本,這意味着將爲該內容發佈新的請求。 – dash
我使用一個讀取所有css的複雜類,最小化它們,在文件上添加版本,並在每次更新中緩存一次(在數據庫上)一次,然後只讀取現有的現有文件。 asp.net 4.5有一個類似的inbuild函數。 – Aristos