我有一个类似的问题;您可以设置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