2010-07-28 15 views
6

Tôi có một trang chủ ASP.NET mà tham chiếu đến tập tin #include như sau:Làm thế nào để làm mới #include file - họ có bộ nhớ đệm trên IIS7/ASP.NET

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

Tôi đã sửa đổi các tập tin/bao gồm /scripts.inc nhưng các thay đổi không hiển thị trong các trang. Những gì cần phải làm để sửa đổi sẽ được phản ánh?

tôi cần phải tránh những điều sau:

  • khởi động lại máy chủ
  • khởi động lại IIS
  • sửa đổi web.config (không xuất hiện để có hiệu lực thi hành)
  • khá nhiều bất cứ điều gì gây ra miền ứng dụng để khởi động lại

Bất kỳ tùy chọn nào khác? Có cài đặt nào ảnh hưởng đến khoảng thời gian lưu trữ IIS bao gồm #include tệp không?

+1

gì loại mã để bạn giữ trong những bao gồm? Tôi không nghĩ rằng bạn nên được sử dụng những loại trường học cũ bao gồm trong ASP.NET. – Jeroen

+0

Tôi biết ai đó sẽ hỏi điều đó. Chỉ cần giả định rằng chúng được yêu cầu cho các ứng dụng :) – frankadelic

+0

Đề nghị của tôi là để tránh điều này bao gồm phong cách - nó đến từ asp, có thể dễ dàng di chuyển, nhưng nó không xử lý hoàn hảo bởi asp.net. Các trang của bạn không hiểu rằng họ cần cập nhật, do đó, không và ở lại như họ đã biên soạn ở nơi đầu tiên. – Aristos

Trả lời

4

Đầu tiên, như bạn có thể biết, bạn không nên sử dụng lệnh #include với ASP.NET. Giải pháp đúng là sử dụng điều khiển người dùng hoặc điều khiển máy chủ. Tuy nhiên, nếu những gì bạn muốn là để tiêm một loạt các HTML và Javascript vào một trang (tức là không có mã server-side), sau đó bạn có thể sử dụng Response.WriteFile:

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

Không thể thực hiện tập lệnh nội tuyến. Các trang được đánh dấu là CompilationMode = "Never". – frankadelic

+0

@frankadelic - Nhưng không phải là lý do duy nhất chúng được đánh dấu bằng CompilationMode = Không bao giờ để cố gắng giải quyết vấn đề làm mới này với các tệp bao gồm? – Thomas

+0

Không, đó thực sự là một quyết định thiết kế mà chúng tôi đã thực hiện trong ứng dụng này. Các tập tin ASPX được xuất bản từ một hệ thống back-end, và chúng ta phải sử dụng CompilationMode = "Never" để ngăn chặn recompilations ... vì điều đó sẽ khiến App Domain khởi động lại, HttpRuntime.Cache được flushed, vv ... http://dotnetslackers.com/ASP_NET/re-666_ASP_NET_2_0_No_Compile_Pages.aspx – frankadelic

3

doens't có bất cứ điều gì để làm với bộ nhớ đệm, phía máy chủ hoặc phía máy khách. Đó là một vấn đề biên dịch. #include không bị bắt như là một sửa đổi trong ASP.NET khi thay đổi, vì vậy trang không được xây dựng lại.

KB Điều này sẽ giúp: http://support.microsoft.com/kb/306575

+1

Không chắc chắn nó phải làm với biên dịch. Ví dụ: nếu tôi tạo trang .aspx với tiêu đề CompilationMode = "Never", ASP.NET sẽ cập nhật trang nếu tôi sửa đổi HTML trong aspx ... Không biên dịch nào xảy ra, nhưng trang được cập nhật. .... anyways, ý chính của câu hỏi của tôi là, làm thế nào để có được những thay đổi được phản ánh khi tôi mở trang trong một trình duyệt ... cho dù đó là bộ nhớ đệm, biên dịch, hoặc một số yếu tố khác. – frankadelic

+0

@frankadelic: Đã cập nhật ở trên. – Stan

2

Vì vậy, miễn là nó thực sự tĩnh bao gồm, chỉ cần tải tập tin trong mã C# và tiêm nó cho mình. sau đó đặt nó trong bộ nhớ đệm với phụ thuộc tập tin và đối tượng sẽ biến null sau khi bạn thay đổi tập tin mà sẽ cung cấp cho bạn cờ để đọc nó một lần nữa.

Nếu nó không thực sự tĩnh bao gồm (static == không có điều khiển ASP.NET - nó có thể rất thay đổi nếu không - như một spew từ một DB hoặc CSS khác nhau cho rất người dùng) sau đó bạn muốn mess với biên dịch trang và đó là sẽ không xảy ra trừ khi bạn đi và viết bộ xử lý mẫu của riêng bạn hoặc một cái gì đó :-)

1

Nếu bạn đang lưu vào bộ nhớ có thể cần phải thay đổi, bạn nên bao gồm số phiên bản trong tên tệp.

ví dụ: < !--#include virtual="/includes/scripts-1.0.inc"-->

sau đó khi bạn cần thay đổi nó, cập nhật bao gồm của bạn để:

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

điều này có thể hoạt động, nhưng đánh bại mục đích của một tệp bao gồm ... vì tôi sẽ cần cập nhật mọi trang tham chiếu đến tệp bao gồm. – frankadelic