2010-07-28 24 views
6

我有一個ASP.NET母版頁,其引用的#include文件,如下所示:如何刷新#include文件 - 他們是在緩存IIS7/ASP.NET

<!--#include virtual="/includes/scripts.inc"--> 

我已經修改了文件/包括/scripts.inc,但這些更改不會顯示在頁面中。 需要做什麼才能體現修改?

我需要避免以下幾點:

  • 重啓
  • 重新啓動IIS
  • 修改web.config文件(沒有出現任何效果)
  • 幾乎任何導致服務器該應用程序域重新啓動

任何其他的選擇嗎?是否有影響IIS緩存#include文件多長時間的設置?

+1

你保持什麼樣的代碼,包括那些?我不認爲你應該在ASP.NET中使用那些老派的包含。 – Jeroen 2010-07-28 20:51:41

+0

我知道有人會問這個。只是假設他們是應用程序所需的:) – frankadelic 2010-07-29 03:36:18

+0

我的建議是避免這種包括風格 - 它來自asp,可能是爲了輕鬆遷移,但它沒有通過asp.net處理得如此完美。你的網頁不明白他們需要更新,所以不要保留,因爲他們已經編譯在第一位。 – Aristos 2010-07-31 18:12:40

回答

4

首先,你可能知道,你不應該在ASP.NET中使用#include指令。正確的解決方案是使用用戶控件或服務器控件。但是,如果你想要的是注入一串HTML和JavaScript到頁面(即沒有服務器端代碼),那麼你可以使用Response.WriteFile:

<%@ Page Language="vb"%> 
<html> 
<body> 
    <% Response.WriteFile("scripts.inc") %> 
</body> 
</html> 
+1

不能做內聯腳本。頁面被標記爲CompilationMode =「從不」。 – frankadelic 2010-08-06 04:03:31

+0

@frankadelic - 但不是它們被標記爲CompilationMode的唯一原因=從未嘗試使用包含文件解決此刷新問題? – Thomas 2010-08-06 04:24:54

+0

不,這實際上是我們在這個應用程序中做出的設計決定。 ASPX文件是從後端系統發佈的,我們必須使用CompilationMode =「Never」來防止重新編譯......因爲這會導致App Domain重新啓動,HttpRuntime.Cache被刷新等等...... http://dotnetslackers.com/ASP_NET/re-666_ASP_NET_2_0_No_Compile_Pages.aspx – frankadelic 2010-08-06 16:31:41

3

好好嘗試一下有什麼關係緩存,無論是服務器端還是客戶端。這是一個彙編問題。 #include在更改時不會作爲ASP.NET中的修改捕獲,因此不會重建頁面。

這KB應該有所幫助:http://support.microsoft.com/kb/306575

+1

不太確定它與編譯有關。例如:如果我創建一個帶頭部CompilationMode =「Never」的.aspx頁面,如果我在aspx中修改了HTML,ASP.NET將更新該頁面...甚至沒有編譯,但頁面已更新。 ....無論如何,我的問題的要點是,如何在瀏覽器中打開頁面時反映出的變化......無論是緩存,編譯還是其他因素。 – frankadelic 2010-08-03 02:07:23

+0

@frankadelic:以上更新。 – Stan 2010-08-03 22:15:51

2

所以只要它是真正的靜態包括,只加載在C#代碼的文件,並自行注射它。然後將它放入具有文件相關性的緩存中,並且在您更改文件後該對象將變爲空,這將爲您提供標記以再次讀取它。

如果它不是真正的靜態包括(靜態==沒有ASP.NET控制 - 它可以是非常多變的,否則 - 就像一個數據庫或不同的CSS的用戶非常用戶)然後你想混亂頁面編譯,這就是不會發生,除非你去寫自己的模板處理器或東西:-)

1

如果你緩存,可能需要修改文件,你應該包括在文件名中的版本號。

如:< !--#include virtual="/includes/scripts-1.0.inc"-->

那麼當你需要進行更改,更新包括到:

<!--#include virtual="/includes/scripts-2.0.inc"--> 
+0

這可能會起作用,但是會破壞包含文件的目的......因爲我需要更新引用包含文件的每個頁面。 – frankadelic 2010-08-06 03:41:45