不错呦!smile@林凯西,确保“准备文件”中的几个文件都有安装,S...您好,看了您这篇帖子觉得很有帮助。但是有个问题想请...我的修改过了怎么还被恶意注册呢 @jjjjiiii 用PJ快9年了,主要是A...PJ3啊,貌似很少有人用PJ了,现在不是WP就是z...@332347365,我当时接入时错误码没有-10...楼主,ChkValue值应为-103是什么意思呢?...大哥 你最近能看到我发的信息,请跟我联系,我有个制...
ASP.NET 项目 Web Site Project 与 Web Application Project 的区别详解
编辑:dnawo 日期:2026-06-22

在软件开发中,项目模型决定了我们如何组织代码、如何编译程序以及如何部署应用,ASP.NET 的项目模型有两种:Web Site Project (WSP) 和 Web Application Project (WAP)。下边我们举个例子说明项目模型的作用以及它们的区别。
例如在一个页面中输出字符“hello, world”,当使用 WSP 模型时,文件可能是这样的:
Default.aspx:
复制内容到剪贴板
程序代码
程序代码<%@ Page Language="C#" AutoEventWireup="true"
CodeBehind="HelloWorld_CodeBehind.aspx.cs"
Inherits="HelloWorld_CodeBehind" %>
<!DOCTYPE html>
<html>
<head>
<title>Hello World - 代码分离</title>
</head>
<body>
<form id="form1" runat="server">
<!-- 用 Label 控件展示后台赋的值 -->
<asp:Label ID="lblMessage" runat="server"></asp:Label>
</form>
</body>
</html>
CodeBehind="HelloWorld_CodeBehind.aspx.cs"
Inherits="HelloWorld_CodeBehind" %>
<!DOCTYPE html>
<html>
<head>
<title>Hello World - 代码分离</title>
</head>
<body>
<form id="form1" runat="server">
<!-- 用 Label 控件展示后台赋的值 -->
<asp:Label ID="lblMessage" runat="server"></asp:Label>
</form>
</body>
</html>
Default.aspx.cs:
复制内容到剪贴板
程序代码
程序代码using System;
public partial class HelloWorld_CodeBehind : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 在页面加载时为 Label 赋值
lblMessage.Text = "hello, world.";
}
}
public partial class HelloWorld_CodeBehind : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
// 在页面加载时为 Label 赋值
lblMessage.Text = "hello, world.";
}
}
若使用 WAP 模型,除了上面两个文件,通常还会多一个文件Default.aspx.designer.cs:
复制内容到剪贴板
程序代码
程序代码// 此文件由 Visual Studio 自动生成,请勿手动修改
public partial class HelloWorld {
/// <summary>
/// form1 控件。
/// </summary>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// lblMessage 控件。
/// </summary>
protected global::System.Web.UI.WebControls.Label lblMessage;
}
public partial class HelloWorld {
/// <summary>
/// form1 控件。
/// </summary>
protected global::System.Web.UI.HtmlControls.HtmlForm form1;
/// <summary>
/// lblMessage 控件。
/// </summary>
protected global::System.Web.UI.WebControls.Label lblMessage;
}
为什么要多这么一个文件呢?根源就在于编译方式的不同:
Web Site Project (WSP) 模型:采用服务器端动态编译方式,页面第一次被访问时才编译,ASP.NET 运行时会根据 .aspx 里的 runat="server" 控件,在后台自动生成一套临时的声明代码,然后合并编译,所以你可以没有 .designer.cs,甚至 .cs 文件里都不用写声明,运行时不会报错,因此部署时能实现像 PHP 一样 “改完即上传、上传即生效” 的体验。
Web Application Project (WAP) 模型:采用本地预编译方式,所有 .cs 业务代码,必须提前编译为 bin 目录下的 .dll 程序集,例如编译器在编译 HelloWorld.aspx.cs 时,需要知道 lblMessage 这个变量是哪里来的、是什么类型,否则编译时就会报错:“当前上下文中不存在名称 lblMessage”。这样在编译阶段就能发现错误,而不是等到运行时才报错。
回顾 ASP.NET 的发展史,WSP 模型在早期降低了 Web 开发的门槛,然而,随着互联网应用越来越复杂,WAP 模型所代表的强类型、预编译、工程化优势逐渐显现。因此,在 .NET Framework 时代,开发者可以自由选择创建 WSP 或 WAP 项目,从 .NET Core 开始,微软已经彻底摒弃了 WSP 模型。
评论: 0 | 引用: 0 | 查看次数: 24
发表评论
请登录后再发表评论!


上一篇:
下一篇: 这是最新一篇日志
文章来自:
Tags:
最新日志:

