2010-07-28 5 views
6

Ho una pagina master ASP.NET, che fa riferimento a un file #include come segue:Come aggiornare i file #include - sono la memorizzazione nella cache IIS7/ASP.NET

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

Ho modificato il file/include /scripts.inc ma le modifiche non vengono visualizzate nelle pagine. Cosa deve essere fatto in modo che le modifiche si riflettano?

ho bisogno di evitare i seguenti:

  • riavviare il server
  • riavvio di IIS
  • modifica web.config (non sembra avere alcun effetto)
  • praticamente qualsiasi cosa che causa il dominio dell'app da riavviare

Altre opzioni? Esiste un'impostazione che influisce sul tempo in cui IIS memorizza nella cache i file #include?

+1

Che tipo di codice si fa a tenere in quelli include? Non penso che dovresti usare quei tipi di inclusivi della vecchia scuola in ASP.NET. – Jeroen

+0

Sapevo che qualcuno lo avrebbe chiesto. Supponiamo che siano necessari per l'applicazione :) – frankadelic

+0

Il mio suggerimento è di evitare questo include lo stile - che proviene da asp, forse per una facile migrazione, ma non è così perfetto da asp.net. Le tue pagine non hanno capito che hanno bisogno di aggiornamento, quindi il non farlo e rimanere come hanno compilato in primo luogo. – Aristos

risposta

4

In primo luogo, come probabilmente sapete, non è necessario utilizzare la direttiva #include con ASP.NET. La soluzione giusta è utilizzare un controllo utente o un controllo server. Tuttavia, se quello che vuoi è quello di iniettare un po 'di HTML e JavaScript in una pagina (cioè nessun codice lato server), allora si potrebbe utilizzare Response.WriteFile:

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

Impossibile eseguire script inline. Le pagine sono contrassegnate come CompilationMode = "Mai". – frankadelic

+0

@frankadelic - Ma non è l'unica ragione per cui sono contrassegnati con CompilationMode = Mai per cercare di risolvere questo problema di aggiornamento con i file inclusi? – Thomas

+0

No, questa è in realtà una decisione progettuale che abbiamo fatto in questa applicazione. I file ASPX sono pubblicati da un sistema di back-end, e dobbiamo usare CompilationMode = "Mai" per impedire ricompilazioni ... perché ciò farà sì che il dominio App si riavvii, HttpRuntime.Cache venga svuotata, ecc ... http://dotnetslackers.com/ASP_NET/re-666_ASP_NET_2_0_No_Compile_Pages.aspx – frankadelic

3

doens't ha nulla a che fare con memorizzazione nella cache, lato server o lato client. È un problema di compilazione. #include non viene rilevato come una modifica in ASP.NET quando viene modificato, quindi la pagina non viene ricostruita.

Questa KB dovrebbe aiutare: http://support.microsoft.com/kb/306575

+1

Non è sicuro che abbia a che fare con la compilazione. Esempio: se creo una pagina .aspx con l'intestazione CompilationMode = "Mai", ASP.NET aggiornerà la pagina se modifico l'HTML all'interno dell'aspx ... Nessuna compilazione sta ancora accadendo, tuttavia la pagina viene aggiornata. .... in ogni caso, il nocciolo della mia domanda è, come ottenere il riflesso delle modifiche quando apro la pagina in un browser ... che si tratti di cache, compilazione o altri fattori. – frankadelic

+0

@frankadelic: aggiornato sopra. – Stan

2

Quindi, fintanto che è davvero statica comprendono, basta caricare il file in codice C# e iniettare da soli. quindi mettilo nella cache con dipendenza dal file e l'oggetto diventerà nullo dopo aver cambiato il file che ti fornirà il flag per leggerlo di nuovo.

Se non è in realtà statica comprendono (== statici senza controlli ASP.NET - può essere molto variabile in caso contrario - come un vomitare da un DB o diverso CSS per molto facile) poi si desidera pasticciare con la compilazione della pagina e questo è non succederà se non andate a scrivere il vostro processore di template o qualcosa del genere :-)

1

Se state memorizzando nella cache i file che potrebbero dover essere modificati, dovreste includere un numero di versione nel nome del file.

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

poi quando è necessario apportare modifiche ad esso, aggiornare il comprendono a:

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

questo potrebbe funzionare, ma vanifica lo scopo di un file di inclusione ... poiché avrei bisogno di aggiornare ogni pagina che fa riferimento al file di inclusione. – frankadelic