2010-07-28 11 views
6

Tengo una página maestra ASP.NET que hace referencia a un archivo # include de la siguiente manera:de cómo actualizar los archivos # include - que están almacenamiento en caché en IIS 7/ASP.NET

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

he modificado el archivo/includes /scripts.inc pero los cambios no aparecen en las páginas. ¿Qué se necesita hacer para que se reflejen las modificaciones?

tengo que evitar lo siguiente:

  • reiniciar el servidor
  • Reiniciar IIS
  • modificar web.config (no parece tener ningún efecto)
  • casi cualquier cosa que provoca el dominio de la aplicación para reiniciar

¿Alguna otra opción? ¿Hay alguna configuración que afecte por cuánto tiempo IIS almacena en caché #include files?

+1

¿Qué tipo de código Cómo se mantiene en los incluye? No creo que deba usar esos tipos de inclusión de la vieja escuela en ASP.NET. – Jeroen

+0

Sabía que alguien lo preguntaría. Solo asuma que son necesarios para la aplicación :) – frankadelic

+0

Mi sugerencia es evitar este estilo de inclusión, viene de asp, quizás para facilitar la migración, pero no es tan perfecto para asp.net. Sus páginas no entendieron que necesitan actualización, por lo que no deben permanecer como se han compilado en primer lugar. – Aristos

Respuesta

4

En primer lugar, como probablemente sepa, no debe utilizar la directiva #include con ASP.NET. La solución correcta es usar un control de usuario o control de servidor. Sin embargo, si lo que quiere es inyectar un montón de HTML y Javascript en una página (es decir, ningún código del lado del servidor), entonces se podría utilizar Response.WriteFile:

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

No se puede hacer el guion en línea. Las páginas están marcadas CompilationMode = "Never". – frankadelic

+0

@frankadelic - ¿Pero no es la única razón por la que están marcados con CompilationMode = Never para tratar de resolver este problema de actualización con archivos incluidos? – Thomas

+0

No, eso es en realidad una decisión de diseño que tomamos en esta aplicación. Los archivos ASPX se publican desde un sistema de fondo, y tenemos que usar CompilationMode = "Nunca" para evitar recompilaciones ... porque eso hará que App Domain se reinicie, HttpRuntime.Cache se vacíe, etc ... http://dotnetslackers.com/ASP_NET/re-666_ASP_NET_2_0_No_Compile_Pages.aspx – frankadelic

3

doens't tiene nada que ver con almacenamiento en caché, ya sea del lado del servidor o del lado del cliente. Es un problema de compilación. #include no se detecta como una modificación en ASP.NET cuando se cambia, por lo que la página no se reconstruye.

Esto debería ayudar KB: http://support.microsoft.com/kb/306575

+1

No estoy tan seguro de que tenga que ver con la compilación. Ejemplo: si creo una página .aspx con el encabezado CompilationMode = "Never", ASP.NET actualizará la página si modifico HTML dentro del aspx ... Aún no está ocurriendo ninguna compilación, pero la página está actualizada. ... de todos modos, la esencia de mi pregunta es cómo reflejar los cambios cuando abro la página en un navegador ... ya sea el almacenamiento en caché, la compilación o algún otro factor. – frankadelic

+0

@frankadelic: Actualizado anteriormente. – Stan

2

Así que, mientras que es muy estática incluir, sólo tiene que cargar el archivo en código C# y lo inyecta a sí mismo. luego colóquelo en la memoria caché con la dependencia de archivos y el objeto se convertirá en nulo después de cambiar el archivo que le proporcionará la bandera para volver a leerlo.

Si no es realmente estático, incluya (static == no controles ASP.NET - puede ser muy variable si no es así - como un spew de un DB o CSS diferente para el usuario) entonces quiere meterse con la compilación de la página y eso es no va a suceder a menos que vaya y escriba su propio procesador de plantilla o algo similar :-)

1

Si está almacenando en caché archivos que podrían necesitar cambios, debe incluir un número de versión en el nombre del archivo.

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

entonces cuando necesite realizar cambios en él, actualizar las necesidades de inclusión a:

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

esto podría funcionar, pero frustra el propósito de un archivo de inclusión ... ya que necesitaría actualizar cada página que haga referencia al archivo de inclusión. – frankadelic

Cuestiones relacionadas