目录
- [一文理清:ASP.NET 项目类型全解析(从 Web Forms 到 .NET Core)](#一文理清:ASP.NET 项目类型全解析(从 Web Forms 到 .NET Core))
-
- [一、按时代划分:.NET Framework 遗留项目 vs .NET Core 现代项目](#一、按时代划分:.NET Framework 遗留项目 vs .NET Core 现代项目)
-
- [1. .NET Framework 时代(Windows 专属,用于维护老系统)](#1. .NET Framework 时代(Windows 专属,用于维护老系统))
- [2. .NET Core / .NET 5+ 时代(跨平台,微软主推)](#2. .NET Core / .NET 5+ 时代(跨平台,微软主推))
- [二、核心差异:「要不要编译成 DLL」?](#二、核心差异:「要不要编译成 DLL」?)
-
- [1. 不预编译 DLL 的项目](#1. 不预编译 DLL 的项目)
- [2. 必须预编译 DLL 的项目](#2. 必须预编译 DLL 的项目)
- 三、快速识别:一眼判断项目类型
-
- [方法 1:看项目文件](#方法 1:看项目文件)
- [方法 2:看 Visual Studio 打开方式](#方法 2:看 Visual Studio 打开方式)
- [方法 3:看部署目录](#方法 3:看部署目录)
- 四、一句话总结记忆
- 五、给开发者的建议
一文理清:ASP.NET 项目类型全解析(从 Web Forms 到 .NET Core)
在.NET 生态里,很多开发者会被「Web Forms / Web Site / Web Application / ASP.NET Core」这些概念绕晕,尤其是「有的项目要编译成 DLL,有的不用」的差异。本文帮你系统梳理所有主流项目类型,一眼看懂区别。
一、按时代划分:.NET Framework 遗留项目 vs .NET Core 现代项目
1. .NET Framework 时代(Windows 专属,用于维护老系统)
这是 2002-2016 年的技术栈,现在主要用于维护 legacy 系统,仅支持 Windows + IIS。
| 项目类型 | 核心特征 | 编译/部署方式 | 典型文件 |
|---|---|---|---|
| ASP.NET Web Site(网站项目) | 无 .csproj/.sln,以文件夹为单位,你截图里的项目就是这种 |
不预编译,部署后首次访问时动态编译成临时 DLL(存于 Temporary ASP.NET Files) |
.aspx + .aspx.cs + Web.config |
| ASP.NET Web Application(Web 应用程序) | 有 .csproj,是 .NET Framework 下的标准工程化模式 |
预编译成项目 DLL,发布后 bin 目录包含所有依赖 DLL |
.csproj + Global.asax + Web.config |
| ASP.NET Web Forms | 事件驱动、控件式开发(如 Button/GridView),类似 WinForm 开发体验 |
可作为 Web Site 或 Web Application 两种模式存在 | .aspx(前端页面) + .aspx.cs(后端逻辑) |
| ASP.NET MVC 5 | 经典 MVC 分层模式(Model-View-Controller) | 预编译成 DLL | .cshtml(视图) + Controller.cs + Models 文件夹 |
| ASP.NET Web API 2 | 专注 RESTful 接口开发,无视图层 | 预编译成 DLL | ApiController.cs + 路由配置代码 |
| ASP.NET ASMX Web Service | 早期 SOAP 风格 Web 服务,已逐渐被 Web API 替代 | 预编译成 DLL | .asmx + 后台代码文件 |
2. .NET Core / .NET 5+ 时代(跨平台,微软主推)
2016 年起微软重写的跨平台技术栈,统一了所有 Web 开发模型,支持 Windows/Linux/macOS,可部署在 IIS/Kestrel/Docker 等。
| 项目类型 | 核心特征 | 编译/部署方式 | 典型文件 |
|---|---|---|---|
| ASP.NET Core Razor Pages | 页面驱动开发,适合简单 Web 场景,语法接近 Web Forms 但更现代 | 预编译成 DLL,也支持 Razor 运行时编译 | .cshtml(页面) + .cshtml.cs(页面模型) |
| ASP.NET Core MVC | 经典 MVC 模式,适合复杂业务系统 | 预编译成 DLL | Controller.cs + .cshtml(视图) + Models |
| ASP.NET Core Web API | 前后端分离首选,专注 RESTful/gRPC 接口 | 预编译成 DLL | Controller.cs / Minimal API 代码 + Program.cs |
| ASP.NET Core Blazor | 用 C# 写前端交互,替代 JavaScript,支持 WebAssembly/Server 模式 | 预编译成 DLL | .razor 组件 + Program.cs |
| ASP.NET Core gRPC Service | 高性能 RPC 服务,适合微服务通信 | 预编译成 DLL | .proto 协议文件 + 服务实现代码 |
| ASP.NET Core Empty | 空白模板,高度自定义,适合做最小 API 或自定义服务 | 预编译成 DLL | 仅 Program.cs |
二、核心差异:「要不要编译成 DLL」?
你遇到的「有的项目要编译 DLL,有的不用」,本质是项目类型的区别,而非技术栈本身:
1. 不预编译 DLL 的项目
只有 ASP.NET Web Site(网站项目) 这一种,是 .NET Framework 遗留模式:
- 无
.csproj,直接以文件夹为单位 .aspx/.aspx.cs代码不提前编译,部署后首次访问时由 ASP.NET 自动编译成临时 DLL- 优点:改完代码直接覆盖服务器文件,无需重新发布
- 缺点:首次访问慢、无编译期强类型校验、难以做单元测试
2. 必须预编译 DLL 的项目
- 所有 .NET Core / .NET 5+ 项目(统一基于
.csprojSDK 风格) - .NET Framework 下的 Web Application(含 Web Forms / MVC / Web API / ASMX)
- 发布后
bin目录会生成项目 DLL 和依赖 DLL,运行时直接加载 DLL
三、快速识别:一眼判断项目类型
方法 1:看项目文件
- 有
.csproj/.sln→ 大概率是 Web Application(Web Forms / MVC / Core),会预编译成 DLL - 无
.csproj/.sln,只有.aspx/.cs/Web.config→ 是 Web Site(老 Web Forms),不预编译
方法 2:看 Visual Studio 打开方式
- 选择「打开网站」→ 打开的是 Web Site(不预编译)
- 选择「打开项目/解决方案」→ 打开的是 Web Application(预编译成 DLL)
方法 3:看部署目录
- 只有
.aspx/.cs/Web.config,无bin下的项目 DLL → Web Site - 有
bin目录,里面包含项目 DLL(如MyProject.dll)→ Web Application / ASP.NET Core
四、一句话总结记忆
- 老项目 :看有没有
.csproj→ 没有就是 Web Site(不用预编译 DLL),有就是 Web Application(要预编译 DLL)。 - 新项目 :全是
.csprojSDK 风格,默认都预编译成 DLL,只是业务形态分为 Razor Pages / MVC / Web API / Blazor 等。 - ASP.NET Core 没有 Web Site 模式,所有项目都走工程化、预编译 DLL 的路线。
五、给开发者的建议
- 维护老项目:继续用 Visual Studio「打开网站」模式,改完代码直接覆盖文件即可。
- 新建项目:强烈推荐 ASP.NET Core,它的编译、部署更规范,性能更好,且跨平台、生态更活跃。
- 迁移老项目:可在 VS 中右键 Web Site →「转换为 Web 应用程序」,将其工程化,便于后续维护和 CI/CD。