ASP.NET中.aspx与.aspx.cs请求时是否合并为单页面类并生成DLL?
问题描述
我有一个包含HTML标签、服务器控件、JavaScript及CSS的.aspx页面,对应的.aspx.cs文件包含后台逻辑代码。想了解当发起该.aspx页面的请求时,.aspx.cs中的代码是否会合并到.aspx文件中,并生成单个包含页面类的DLL?
以下是示例文件:
simple.aspx
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="simple.aspx.cs" Inherits="sample.simple" %> <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title></title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="label1" Text="" runat="server"></asp:Label> <br/> <asp:Button ID="button1" runat="server" Text="Click" OnClick="button1_Click" /> </div> </form> </body> </html>
simple.aspx.cs
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace sample { public partial class simple: System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { } protected void button1_Click(object sender, EventArgs e) { label1.Text = "Hi Sudarshan"; } } }
解答
得看你用的是哪种ASP.NET Web Forms项目类型,分两种情况说:
1. Web应用程序项目(Web Application Project)
你的示例里用了CodeBehind属性,这是Web应用程序项目的标配。这种模式下:
- 开发阶段,.aspx.cs里的后台逻辑会被单独编译到项目的主DLL里(比如你的项目会生成
sample.dll)。 - .aspx页面本身不会和.cs代码合并,第一次请求页面时,ASP.NET会自动生成一个页面适配类(它继承自你在
Inherits里指定的sample.simple类),这个动态类负责处理.aspx里的服务器控件、HTML模板这些内容,然后被编译成临时DLL,存在服务器的Temporary ASP.NET Files目录里。 - 运行的时候,是主DLL里的后台类和这个动态生成的页面类配合工作,并不是把两者合并成单个DLL。
2. 网站项目(Web Site Project)
如果是用CodeFile属性的网站项目(和你的示例配置不一样):
- 第一次请求页面时,ASP.NET会把.aspx和对应的.cs文件合并成一个完整的类,然后编译成临时DLL,同样存在
Temporary ASP.NET Files目录里。 - 之后再请求这个页面,就直接用已经编译好的临时DLL,除非你修改了.aspx或.cs文件。
简单说:你的示例属于Web应用程序项目,.aspx.cs不会合并到.aspx里,而是编译到项目主DLL;只有网站项目才会把.aspx和.cs合并生成单个临时DLL。
内容的提问来源于stack exchange,提问作者Sudarshan Patil
相关产品推荐
相关产品推荐

