私にも同様の問題がありました。 CSSファイルにcontent-expiration headerを追加してキャッシュされないように設定するか、このSOの質問に記載されているソリューションを使用することができます。here
また、各ページにメソッドを追加することもできます例MyTheme1_1または類似のために - もう一つの技術は、テーマ名にバージョン番号を含めることであろう
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);
}
:あなたのpage.headerのコントロールは、(!おそらくあなたのMaster.Page内)のような何かをします。その後、各リリースでは、「新しい」URLからコンテンツがロードされるため、コンテンツは各ユーザーに対して再度要求される必要があります。明らかに、これはより多くの作業ですが、リリースごとに1回でなければならず、以下に述べるオーバーヘッドはありません。
面白いですが、すべてのページでCPUのコストが高すぎます。 – Aristos
@Aristos次に、私があなたのことを考えている唯一のことは、あなたのアプリのバージョン番号をテーマ名に入れていることです。少なくとも各リリースでは各テーマの特有のバージョンが使用されます。つまり、そのコンテンツに対して新しいリクエストが発行されます。 – dash
私は、すべてのcssを読み込み、それらを最小化し、ファイル上のバージョンを追加し、(データベース上で)すべての更新で一度だけキャッシュする複雑なクラスを使用して、既存のファイルを読み込みます。 asp.net 4.5にも同様のinbuild機能があります。 – Aristos