每个开发者应该了解的5个.NET CLI命令
大多数C#开发者在整个工作流程中都在IDE内操作,通过点击按钮来编译、启动和测试他们的应用程序。 这种方式一直有效,直到失效。 自动化流水线、远程服务器和容器化环境没有图形界面,掌握一些终端命令能够让您在这些情况下保持高效,而无需使用鼠标。
在他的视频 "每位开发者都应该知道的5个必备.NET CLI命令" 中,Tim Corey 介绍了五个覆盖日常开发的大部分地面的 dotnet 操作:clean 和 publish。 每一个都进行了实用演示,展示了不仅是语法,还包括何时和为什么使用它。 无论您是否习惯于使用终端,还是很少打开终端,这些命令都值得记住。
使用dotnet --info检查您的环境
[0:31 - 1:25] 在运行任何项目命令之前,Tim首先验证开发环境。 dotnet 命令本身确认 CLI 已安装并且可以在您的路径上访问,但 dotnet --info 走得更远:
dotnet --infodotnet --info这将打印出您计算机上安装的每个SDK和运行时版本,以及操作系统详细信息和活动架构。 Tim在.NET 10上演示了这一点,但该命令在任何版本上都可以相同地工作。 知道您安装了什么对调试版本不匹配或验证CI服务器是否镜像您的本地设置特别有帮助。
命令1:dotnet build
[2:16 - 3:44] 第一个命令编译您的项目而不启动它:
dotnet builddotnet build从项目目录运行这个命令可以读取 .csproj 文件,解决依赖关系,并在 bin 文件夹下生成已编译的输出。 Tim指出编译是一个独立的步骤,与执行分开。 这种分离很重要,当您希望在提交到仓库或交给构建服务器之前验证您的代码能否干净地编译。
.NET SDK在构建过程中处理依赖关系解决,提取缺失的NuGet包并确保所有引用的程序集都存在。 如果此阶段失败,错误消息会直接指出问题所在,无论是缺少引用、语法错误还是目标框架不匹配。 在应用程序运行之前发现这些问题可以节省整个开发周期中的时间。
命令2:dotnet run
[3:44 - 5:42] 在 build 停止于编译时,run 迈出下一步并启动应用程序:
dotnet rundotnet run这会编译项目(如果需要的话),然后执行生成的输出。 对于控制台应用程序,这意味着在终端中运行它。 对于 web项目,内置的Kestrel服务器启动,应用程序在本地URL上可用。
Tim通过一个web应用程序演示了这一点,导航到正在运行的网站以确认一切正常加载。 build 和 run 之间的关键区别在于 run 产生实时交互的结果。 在积极开发期间,这是您用来测试更改及其效果最频繁的命令。
命令3:dotnet watch
[5:42 - 7:06] 停止应用程序、进行更改并重启它很快就让人感到乏味。 watch 命令消除了该循环:
dotnet watchdotnet watch这将运行过程包裹在一个文件监视器中。 当您保存任何源文件的更改时,CLI会检测到修改并自动重新编译和刷新应用程序。 对于使用ASP.NET Core构建的Web应用程序,对Razor文件、CSS和C#代码的更改会在无需手动重启的情况下出现在浏览器中。
Tim展示了热重载的行为:编辑页面,保存,并立即看到更新反映。 这种紧密的反馈循环在UI工作中非常有价值,因为小的调整会不断发生。 不必循环通过停止-编辑-重建-启动,您可以专注于代码,其他事情交给工具处理。
命令4:dotnet clean
[7:06 - 7:56] 随着时间的推移,构建工件累积在 bin 和 obj 目录中。偶尔,过时的编译文件会导致令人困惑的行为,例如您最新的代码更改似乎没有生效,或构建在本地成功,但在新的机器上失败。clean 命令解决了这个问题:
dotnet cleandotnet clean运行它会删除输出目录的内容,因此您的后续构建从头开始。 Tim将此视为故障排除工具,而不是您在每次更改后运行的东西。 当您的项目表现出乎意料时,您怀疑缓存的输出是罪魁祸首,clean 后接 build 确保您正在使用真正的全新编译。
这种习惯尤其在切换版本控制中的分支、将依赖项升级到新主版本时以及解决似乎偶尔出现的构建警告而没有明确原因时特别有用。
命令5:dotnet publish
[7:56 - 9:01] 最后的命令架起了开发与部署之间的桥梁:
dotnet publishdotnet publishbuild 生成适合本地调试的输出,而 publish 创建一个部署准备好的包。 编译好的程序集、配置文件、静态资产和任何所需的运行时组件都放在一个您可以直接复制到服务器的 publish 文件夹中。
build 和 publish 之间的区别让一些开发人员感到意外。 build 输出包括调试符号和参考,这在开发中有用,但在生产中不必要(有时甚至是不希望的)。 发布剥离掉这些额外的东西,并为其目标环境组织输出。 在部署到Docker或上传到云托管时,发布的输出就是应该放在您的最终镜像或发布包中的东西。
结束:五个命令,一个工作流程
[9:01 - 9:15] Tim 通过将全部五个命令一起列出作为结尾:dotnet clean 和 dotnet publish。 作为一个集合,它们涵盖了从编译到部署的核心开发循环。 每一个都有特定的用途,知道何时使用每一个都会给予您一种点击IDE按钮无法提供的控制水平。
结论
[9:15 - 9:30] 这五个CLI命令处理您在开发期间最常执行的任务:编译、运行、实时重载、清理过期的输出以及打包发布。 它们适用于每个.NET项目类型和SDK支持的每个操作系统。
下次当您打开终端时,无论是在您的本地机器、容器内还是在远程服务器上,您已经具备通过整个开发周期而无需图形界面的词汇。
示例提示:您可以使用 dotnet clean && dotnet build 将 clean 和 build 链接为单行。 这一步确保从头编译,这在排查跨增量构建持续存在的问题时尤其方便。

