我正在寻找一篇将深入探讨ASP.NET如何工作以及如何从XML标记呈现控件的文章。例如,在幕后,ASP.NET如何采用以下标记并让它产生我们看到的结果?
<asp:Label ID="MyLabel"><%= myObject.Text%></asp:Label>
有没有人知道任何会深入探讨ASP.NET内部工作原理的文章?
答案 0 :(得分:6)
“幕后”发生的事情是,每个ASP.NET页面都被编译成.NET类,就像其他任何一样。控件(ASCX)以相同的方式编译。有一个用于ASP.NET标记的编译器就像c#和VB.NET的编译器一样 - 您可以将ASP.NET标记视为编译为本机MSIL的“另一种”语言。
本机ASP.NET标记由PageParser处理。您可能会注意到这个类有一个有趣且非常有用的方法 - GetCompiledPageInstance。正如它所暗示的,它将页面编译为本机.NET类。这可以被覆盖(例如,您可以提出自己的标记并编写自己的解析器/编译器)。 Spark是ASP.NET标记的常用替代方法。
每个班级最终都来自Page或Control。这两个类都有Render()方法,在类执行其实现的自定义功能的最后,将HTML写入输出流。
最大的区别在于编译经常发生在与c#或VB.NET代码不同的时间。这不是真正的技术要求,因为它是一种允许将表示.NET语言与功能.NET语言分离的功能。 ASPX和ASCX页面是在ASP.NET运行时在Web服务器的上下文中请求时编译的。然后将编译的程序集保存在内存中,直到a)Web应用程序关闭或b)在其中一个ASPX文件中检测到文件系统更改,从而触发重新编译。
It is possible to compile您的ASPX页面与您的c#/ VB.NET /无论如何,因此您可以将整个应用程序部署为单个程序集。这有两个优点 - 一个是部署单个DLL的明显简易性。其次,它消除了 LOOOONG 等待时间,这通常伴随着对ASP.NET Web应用程序的“第一次命中”。由于所有页面都是预编译的,因此只需在第一次请求时将程序集加载到内存中,而不是编译每个文件。
答案 1 :(得分:2)
反射器 - &gt;展开System.Web.UI - &gt; PageParser类 - &gt;反编译 - &gt;享受
(对不起,不要试图嗤之以鼻;这是我能够自己掌握它的唯一方法)
答案 2 :(得分:0)
我总是喜欢这个网站......
答案 3 :(得分:-1)
我需要一个LMBTFY(让我为你做Bing)。 ; P
无论如何,这里有一些页面:
Compilation and Deployment in ASP.NET 2.0
Inside the ASP.NET 2.0 Code Compilation Model