Как обновить файлы #include - они кэшируются на IIS7 / ASP.NET - PullRequest
6 голосов
/ 28 июля 2010

У меня есть главная страница ASP.NET, которая ссылается на файл #include следующим образом:

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

Я изменил файл /include/scripts.inc, но изменения не отображаются на страницах. Что нужно сделать, чтобы изменения были отражены?

Мне нужно избегать следующего:

  • перезапуск сервера
  • перезапуск IIS
  • изменение web.config (похоже, не имеет никакого эффекта)
  • почти все, что вызывает перезапуск домена приложения

Есть ли другие варианты? Есть ли параметр, который влияет на то, как долго IIS кэширует файлы #include?

Ответы [ 4 ]

4 голосов
/ 01 августа 2010

Во-первых, как вы, наверное, знаете, вы не должны использовать директиву #include с ASP.NET.Правильное решение - использовать пользовательский элемент управления или серверный элемент управления.Однако, если вы хотите вставить на страницу несколько HTML и Javascript (т.е. без кода на стороне сервера), вы можете использовать Response.WriteFile:

<%@ Page Language="vb"%>
<html>
<body>
    <% Response.WriteFile( "scripts.inc" ) %>
</body>
</html>
3 голосов
/ 01 августа 2010

Не имеет ничего общего с кэшированием, как на стороне сервера, так и на стороне клиента.Это проблема компиляции.#include не считается изменением в ASP.NET при изменении, поэтому страница не перестраивается.

Этот КБ должен помочь: http://support.microsoft.com/kb/306575

2 голосов
/ 04 августа 2010

Так что, пока он действительно статический, просто загрузите файл в коде C # и вставьте его самостоятельно. затем поместите его в кэш с зависимостью от файла, и объект изменится на ноль после того, как вы измените файл, который предоставит вам флаг для повторного чтения.

Если на самом деле это не статическое включение (статическое == нет элементов управления ASP.NET - в противном случае оно может быть очень изменчивым - например, выпадение из БД или другой CSS для самого пользователя), тогда вы захотите возиться с компиляцией страницы, но произойдет, если вы не напишите свой собственный шаблонный процессор или что-то еще: -)

1 голос
/ 04 августа 2010

Если вы кэшируете файлы, которые, возможно, потребуется изменить, вы должны включить номер версии в имя файла.

Например: <<code>!--#include virtual="/includes/scripts-1.0.inc"-->

, тогда, когда вам нужно сделатьвнесите в него изменения:

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