本课学习目标
- 理解 Build、Publish 与 Deploy 的区别。
- 理解 Debug 与 Release 的用途差异。
- 在 Visual Studio 建立 Folder Publish Profile。
- 认识 Framework-dependent deployment。
- 认识 Self-contained deployment。
- 理解 Runtime Identifier,例如 win-x64。
- 使用 Single-file 发布。
- 知道发布输出目录在哪里。
- 确认 appsettings.json 等内容文件一起发布。
- 理解 Self-contained 不会自动包含 SQL Server LocalDB。
- 建立部署前检查清单并在另一台电脑测试。
35.1 Build、Publish 与 Deploy
编译
把源代码转换成程序集和可执行文件,主要用于开发与测试。
发布
准备可分发版本,并根据模式加入应用依赖或 .NET Runtime。
部署
把发布结果交付、复制或安装到用户电脑或发布位置。
35.2 Debug 与 Release
主要用于开发、断点与调试。开发期间通常从 Visual Studio 运行。
用于准备正式发布版本。发布操作通常使用 Release configuration。
在 Visual Studio 工具栏可以把:
Debug
切换成:
Release
35.3 建立 StudentDeploymentDemo2026
为了把重点放在部署,本课可以使用一个简化 Windows Forms 项目:
StudentDeploymentDemo2026
窗体显示:
应用名称
应用版本
运行目录
配置文件状态
.NET Runtime 信息
数据库依赖说明
35.4 在程序中显示运行信息
Form1.vb:
Imports System.Runtime.InteropServices
Public Class Form1
Private Sub Form1_Load(
sender As Object,
e As EventArgs) Handles MyBase.Load
lblAppName.Text =
"Student Deployment Demo 2026"
lblRuntime.Text =
RuntimeInformation.FrameworkDescription
lblArchitecture.Text =
RuntimeInformation.ProcessArchitecture.ToString()
lblFolder.Text =
AppContext.BaseDirectory
End Sub
End Class
发布后,这些信息可以帮助确认程序实际运行的位置和架构。
35.5 建立 Publish Profile
在 Solution Explorer:
右键项目
→ Publish
第一次发布时选择:
Folder
再选择输出位置,例如:
bin\Release\net10.0-windows\publish\
35.6 Framework-dependent 发布
Framework-dependent 模式发布:
应用程序
+ 应用依赖
- 不包含完整 .NET Runtime
目标电脑必须安装可供应用使用的相应 .NET Runtime。
发布体积较小;运行环境可以使用已安装的 .NET Runtime 安全更新。
目标电脑必须已经安装适当的 .NET Runtime。
35.7 Self-contained 发布
Self-contained 会把应用运行所需要的 .NET 文件一起发布。
应用程序
+ 应用依赖
+ .NET Runtime
因此目标电脑不需要预先安装对应 .NET Runtime。
35.8 应该选哪一种?
对本教程初次部署练习,可以优先体验:
Self-contained
Target Runtime = win-x64
35.9 什么是 Runtime Identifier?
RID 用来指定目标操作系统和架构。例如:
win-x64
表示:
Windows
64-bit x64
还有其他 RID,例如不同架构或操作系统,但 Windows Forms 应用本身是 Windows 桌面技术,因此本教程部署目标使用 Windows。
35.10 Single-file 发布
Visual Studio Publish → Show all settings 中可以启用:
Produce single file
这会把应用相关文件尽量捆绑成单个应用二进制,方便复制和分发。
目录里可能有 EXE、DLL、JSON 和其他依赖文件。
主要应用依赖被捆绑,目录更简洁,但仍要检查外部内容文件和外部软件依赖。
35.11 Visual Studio 推荐练习设置
35.12 Publish 后会得到什么?
普通发布目录可能类似:
实际文件数量取决于发布模式和项目依赖。
35.13 不要只在 Visual Studio 里测试
发布成功后:
- 关闭 Visual Studio 中正在运行的程序。
- 打开 publish 文件夹。
- 双击应用的 EXE。
- 确认程序可以独立启动。
- 测试配置、文件、网络和数据库功能。
35.14 appsettings.json 是否一起发布?
Lesson 34 已经设置:
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
</None>
为了明确发布行为,也可以配置:
<None Update="appsettings.json">
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
<CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory>
</None>
发布后要实际检查:
publish\appsettings.json
35.15 user-settings.json 不需要跟着发布
Lesson 34 的用户偏好位于:
LocalApplicationData
\VBTutor
\StudentSettingsManager2026
\user-settings.json
这是运行后为每个用户建立的资料,不应该把开发电脑自己的 user-settings.json 当成应用文件复制给所有用户。
35.16 LocalDB 是独立部署依赖
前面的数据库课程使用:
(localdb)\MSSQLLocalDB
开发电脑通常因为 Visual Studio 的数据工作负载而已经拥有 LocalDB,但普通用户电脑不一定有。
35.17 数据库应用怎样正式部署?
安装 LocalDB
目标机器另外安装 SQL Server Express LocalDB,并准备数据库。
连接 SQL Server
应用连接由管理员维护的 SQL Server 实例。
通过 Web API
客户端不直接连接远程数据库,而是通过 HTTPS API 访问服务端。
本教程当前 LocalDB 项目适合继续学习桌面数据库基础;真正商业部署前,应根据用户数量、安全、备份与网络结构重新选择数据库部署方案。
35.18 数据库结构也需要部署
只复制 EXE 并不会自动在目标 SQL Server 中建立:
StudentManagementDB
dbo.Students
因此数据库部署还可能需要:
CREATE DATABASE
CREATE TABLE
ALTER TABLE
初始基础数据
正式项目通常会使用数据库脚本或迁移机制管理数据库版本。
35.19 发布前检查 Connection String
开发连接字符串:
Server=(localdb)\MSSQLLocalDB;
Database=StudentManagementDB;
Integrated Security=True;
如果正式环境改用服务器数据库,连接字符串也必须改为目标环境对应设置。
35.20 实作:Student Deployment Demo 2026
Form1 建议控件:
35.21 检查配置文件是否存在
Imports System.IO
Private Sub CheckConfiguration()
Dim configPath As String =
Path.Combine(
AppContext.BaseDirectory,
"appsettings.json")
If File.Exists(
configPath) Then
lblConfigStatus.Text =
"appsettings.json:已找到"
Else
lblConfigStatus.Text =
"appsettings.json:未找到"
End If
End Sub
35.22 显示应用版本
Dim version =
Reflection.Assembly.
GetExecutingAssembly().
GetName().
Version
lblVersion.Text =
$"Version: {version}"
这有助于用户和技术支持人员确认正在运行哪一个版本。
35.23 完整发布流程
35.24 为什么发布前要 Rebuild?
发布前建议:
Build
→ Rebuild Solution
并确认:
0 Errors
这样可以避免把仍然无法完整构建的项目直接交给用户。
35.25 最重要的测试:另一台电脑
开发电脑通常已经装有:
Visual Studio
.NET SDK
LocalDB
开发工具
NuGet 缓存
各种运行组件
因此只在开发电脑测试,很容易误以为部署已经完整。
双击 EXE 是否正常打开。
appsettings.json 是否能正确读取。
用户设置是否能写进 LocalApplicationData。
目标电脑是否具备需要的数据库运行环境。
Web API 是否被防火墙、代理或网络限制阻挡。
例如 win-x64 是否符合目标电脑。
35.26 再尝试 Single-file
普通 Self-contained Folder 发布成功后,再打开 Publish Profile:
Show all settings
→ Produce single file
→ Save
→ Publish
比较两次发布目录的文件数量和 EXE 大小。
35.27 ClickOnce 简介
Folder Publish 适合先理解部署文件本身。如果希望提供较完整的 Windows 安装与更新体验,还可以研究 ClickOnce。
现代 .NET Windows 应用在 Visual Studio 中使用 Publish 工具建立 ClickOnce 发布配置。
35.28 dotnet publish 简介
除了 Visual Studio,也可以从命令行发布。
Framework-dependent:
dotnet publish -c Release
Windows x64 Self-contained:
dotnet publish -c Release -r win-x64 --self-contained true
Single-file:
dotnet publish -c Release -r win-x64 \
--self-contained true \
-p:PublishSingleFile=true
Windows PowerShell 或命令提示符输入时,可以放在一行。
35.29 发布前最终检查清单
Rebuild 成功,无编译错误。
明确选择 Framework-dependent 或 Self-contained。
确认 win-x64 或其他目标架构。
检查 appsettings.json 等必要文件。
发布目录和源码中没有真实秘密凭证。
确认 LocalDB / SQL Server / API 的实际部署方式。
可写数据放在用户目录,不写死安装目录。
在没有 Visual Studio 的目标环境验证。
35.30 初学者常见错误
直接把 bin\Debug 复制给用户
应该使用 Publish 生成明确的发布输出。
以为 Self-contained 包含 LocalDB
Self-contained 解决 .NET Runtime 依赖,不会自动安装 SQL Server LocalDB。
只在开发电脑测试
开发电脑依赖齐全,无法代表普通用户环境。
配置和数据库仍指向开发环境
发布前必须检查 API URL、连接字符串和环境依赖。
35.31 小练习
- 建立 Framework-dependent Folder Publish,记录发布目录大小。
- 再建立 Self-contained win-x64 Publish,比较大小。
- 开启 Produce single file,再比较文件数量。
- 从 publish 目录直接运行,而不是按 F5。
- 确认 appsettings.json 出现在发布目录。
- 在没有 Visual Studio 的电脑测试 Self-contained 版本。
- 列出 StudentManagementDB 项目真正部署时还需要处理的数据库依赖。
本课复习
- Build、Publish 与 Deploy 有什么区别?
- Release 与 Debug 的主要用途有什么不同?
- Framework-dependent 发布需要目标电脑具备什么?
- Self-contained 发布包含什么?
- win-x64 表示什么?
- Single-file 发布有什么优点与限制?
- 为什么必须检查 appsettings.json 是否进入 publish 目录?
- 为什么 user-settings.json 不应该从开发电脑一起发布?
- 为什么 Self-contained 应用仍可能无法连接 LocalDB?
- 为什么最终必须在没有开发环境的目标电脑测试?