gpt4 book ai didi

asp.net - aspx 是如何编译的?

转载 作者:行者123 更新时间:2023-12-02 00:17:24 26 4
gpt4 key购买 nike

.aspx 和 aspx.cs 文件是如何编译的?它是两个程序集还是这两个文件合并为一个并将创建为一个程序集?它遵循任何层次结构/继承吗? .aspx 正在被创建为相应的 C# 代码文件(只有这样我们才能创建一个程序集,对吧?如果我错了请纠正我!)作为 Windows 窗体 Designer.cs 文件中的文件?

最佳答案

这取决于项目类型。使用 ASP .Net,您可以创建两种类型的项目: Web Application Project and Web Site Project.

.aspx 和 aspx.cs 文件是如何编译的?

通过 Web 应用程序 项目,您可以将该项目中找到的 aspx 文件、用户控件和其他代码的隐藏代码编译到一个 dll 中,并将其部署到服务器上。

使用网站项目,您只需将源代码复制到服务器上,ASP .Net 将为您处理编译。网站项目在 App_Code 文件夹中保存自定义类的源代码(您必须在该链接上阅读有关这些内容的更多信息)

它是两个程序集还是这两个文件合并为一个程序集并将其创建为一个程序集?

在这些情况下,aspx、ascx 文件中找到的代码都不是由您编译的(使用 Visual Studio 等)。 ASP .Net 解析这些文件并创建一个 dll 存储在其临时文件夹中。 “aspx、ascx”dll(虽然它可以不止一个)是与您使用 Visual Studio 创建的文件不同的文件(我相信与从 App_Code 文件夹创建的文件不同,因为该代码不能在页面中找到访问代码)。

它遵循任何层次结构/继承吗?

是的。当解析和编译页面时,生成的类将继承名为 "Inherits" 的类。属性,可在 @Page 指令中找到。

<%@ Page Language="C#" CodeBehind="Default.aspx.cs" 
Inherits="WebApplication1._Default" %>

ASP .Net解析Default.aspx文件并生成一个继承WebApplication1._Default的类

public class default_aspx : global::WebApplication1._Default
{

}

鉴于从标记生成的类继承了我们编写的类(通常是后面代码中的 aspx.cs 文件),我们可以自由使用其成员或方法。

以下方法是 _Default 类的方法:

 protected string ToUpper(string source)
{
return source.ToUpper();
}

然后在标记中我们可以调用:

<form id="form1" runat="server">
<%= ToUpper("Microsoft") %>
</form>

我们甚至可以在标记中编写如下内容:

<% SomeValue = 1; %>
<%= SomeValue %>

其中 SomeValue 至少是 _Default 类的 protected 属性。

我们也可以在标记中自由声明成员并编写服务器代码:

<head runat="server">

<script runat="server" language="C#">
private int someCounter = 10;
</script>

</head>
<body>
<% for (var i = 0; i < someCounter; i++)
{ %>
<p>
Paragraph number:<%= i %>
</p>
<% } %>
</body>
</html>

这里我声明了一个 someCounter 字段并用它来写入 10 个段落。当然,这不是推荐的做法。由于 someCounter 是生成的类的成员,因此在后面的代码中无法访问它。

这种架构还有另一个巨大的(也是更真实的)优势。假设网站中的某些页面是静态的(about.aspx、privacy.aspx 等),它们使用相同的母版页。此页面后面的代码不会更改。这意味着我们可以创建其他页面并部署它们,而无需对后面的代码进行另一次编译(这方面适用于 Web 应用程序项目)。此外,在上线之前,我们可能只允许一个人查看这些页面。因此,为了实现这一目标,我们创建一个 PreviewPage 类

public PreviewPage: System.Web.Page
{
public PreviewPage()
{
this.Load += (o, e) => {
// code here to see if the authenticated user has the right to see the page
// if not, redirect the user to another page
}
}
}

并更改Inherits值:

<%@ Page Language="C#" Inherits="WebApplication1.PreviewPage" %>

aspx 正在创建为相应的 C# 代码文件

@Page 指令中的Language 属性指示使用什么语言来编译aspx/ascx 文件。因此,您实际上可以在 aspx 文件中使用 VB.Net,并使用 C# 编译器来编译网站。

这是另一种编译,与 Visual Studio 不同,它是使用不同的选项制作的。这就是为什么在 web.config 中有一些选项可以将 compilationMode 设置为 Debug/Release 并指示编译器使用其他可用选项。

关于asp.net - aspx 是如何编译的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9859198/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com