2010-07-28 5 views
6

J'ai une page maître ASP.NET qui fait référence à un fichier #include comme suit:Comment rafraîchir #include fichiers - ils sont en cache sur IIS7/ASP.NET

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

J'ai modifié le fichier/includes /scripts.inc mais les modifications n'apparaissent pas dans les pages. Que faut-il faire pour que les modifications soient reflétées?

J'ai besoin pour éviter les éléments suivants:

  • redémarrer le serveur
  • redémarrage d'IIS
  • modification web.config (ne semble pas avoir d'effet)
  • à peu près tout ce qui cause le domaine de l'application pour redémarrer

Toutes les autres options? Y at-il un paramètre qui affecte combien de temps IIS met en cache les fichiers #include?

+1

Quel genre de code gardez-vous dans les comprend? Je ne pense pas que vous devriez utiliser ces types d'inclusion old-school dans ASP.NET. – Jeroen

+0

Je savais que quelqu'un me le demanderait. Il suffit de supposer qu'ils sont nécessaires pour l'application :) – frankadelic

+0

Ma suggestion est d'éviter cet écueil, le style - son provenant asp, peut-être pour la migration facile, mais ce ne est pas gérer si parfait par asp.net. Vos pages ne comprenaient pas qu'elles ont besoin d'être mises à jour, alors elles ne le font pas et restent comme elles l'ont fait en premier lieu. – Aristos

Répondre

4

D'abord, comme vous le savez probablement, vous ne devriez pas utiliser la directive #include avec ASP.NET. La bonne solution consiste à utiliser un contrôle utilisateur ou un contrôle serveur. Toutefois, si ce que vous voulez est d'injecter un tas de HTML et Javascript dans une page (pas de code côté serveur), vous pouvez utiliser Response.WriteFile:

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

Impossible de faire le script en ligne. Les pages sont marquées CompilationMode = "Jamais". – frankadelic

+0

@frankadelic - Mais n'est-ce pas la seule raison pour laquelle ils sont marqués avec CompilationMode = Jamais pour essayer de résoudre ce problème d'actualisation avec les fichiers include? – Thomas

+0

Non, c'est en fait une décision de conception que nous avons prise dans cette application. Les fichiers ASPX sont publiés à partir d'un système dorsal, et nous devons utiliser CompilationMode = "Jamais" pour empêcher les recompilations ... car cela entraînera le redémarrage de l'App Domain, le vidage de HttpRuntime.Cache, etc ... http://dotnetslackers.com/ASP_NET/re-666_ASP_NET_2_0_No_Compile_Pages.aspx – frankadelic

3

doens't ont rien à voir avec la mise en cache, côté serveur ou client. C'est un problème de compilation. #include n'est pas détecté comme une modification dans ASP.NET lorsqu'il est modifié, de sorte que la page n'est pas reconstruite.

Cette KB devrait aider: http://support.microsoft.com/kb/306575

+1

Pas si sûr que cela a à voir avec la compilation. Exemple: si je crée une page .aspx avec l'en-tête CompilationMode = "Jamais", ASP.NET mettra à jour la page si je modifie HTML dans l'aspx ... Aucune compilation n'est en cours, pourtant la page est mise à jour. .... de toute façon, l'essentiel de ma question est, comment obtenir les changements reflétés lorsque j'ouvre la page dans un navigateur ... que ce soit la mise en cache, la compilation, ou un autre facteur. – frankadelic

+0

@frankadelic: Mise à jour ci-dessus. – Stan

2

Donc, tant que c'est vraiment comprendre statique, il suffit de charger le fichier dans le code C# et injecter vous-même. alors mettez-le dans le cache avec la dépendance de fichier et l'objet deviendra null après que vous changiez le fichier qui vous fournira l'indicateur pour le relire. Si ce n'est pas vraiment statique, ajoutez (statique == aucun contrôle ASP.NET - il peut être très changeable sinon - comme un spew d'un DB ou un CSS différent pour un utilisateur) alors vous voulez jouer avec la compilation de page et c'est ne va pas arriver à moins que vous allez écrire votre propre processeur de modèle ou quelque chose :-)

1

Si vous cache des fichiers qui pourraient avoir besoin de changer, vous devez inclure un numéro de version dans le nom du fichier.

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

alors lorsque vous devez apporter des modifications, mettez à jour votre inclure à:

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

cela pourrait fonctionner, mais cela va à l'encontre de l'objectif d'un fichier include ... puisque j'aurais besoin de mettre à jour chaque page qui fait référence au fichier include. – frankadelic

Questions connexes