.NET 10 之dotnet run的功能

一、dotnet run 的基本功能

dotnet run 的基本功能是:

  1. 编译应用程序 :首先,dotnet run 会对项目进行编译,确保代码和依赖项被正确构建。
  2. 运行应用程序 :编译完成后,dotnet run 会启动应用程序,默认会使用项目的 Main 方法(对于控制台应用)或 Web 项目的启动逻辑(如 ASP.NET Core 应用的 Program.csStartup.cs)。

二、使用场景

  1. 开发期间
    dotnet run 最常见的使用场景是在开发阶段,开发者可以使用该命令快速启动应用程序进行本地测试和调试,无需手动执行构建操作。

  2. 自动化脚本

    在自动化构建或 CI/CD 流程中,dotnet run 可以与脚本结合使用,实现自动构建并启动应用程序。

  3. 跨平台开发
    dotnet run 是跨平台的,可以在 Windows、Linux 和 macOS 上使用。对于不同操作系统,.NET 平台会自动选择合适的运行时和目标架构。

三、dotnet run 的工作流程

  1. 依赖恢复(Restore)

    在执行 dotnet run 之前,如果项目的依赖项尚未恢复,dotnet 会自动执行 dotnet restore。这会确保所有的 NuGet 包都被下载并正确安装,以便构建过程中使用。

  2. 编译(Build)

    在依赖恢复之后,dotnet run 会执行 dotnet build 命令,编译源代码并生成中间语言(IL)文件。编译过程中会使用项目中的配置文件(如 .csproj)和相关的构建工具(如 Roslyn 编译器)。

  3. 执行应用程序

    编译完成后,dotnet run 会直接启动编译后的程序。如果应用是控制台应用程序,它会从 Main 方法开始执行。如果是 Web 应用程序(如 ASP.NET Core),则会启动 Web 服务器(默认是 Kestrel),并根据应用的设置监听指定的端口。

  4. 调试(可选)

    如果配置了调试器,并且通过 IDE(如 Visual Studio 或 Visual Studio Code)启动,dotnet run 也会启动调试会话。在命令行中,dotnet run 本身不直接进行调试,但可以配合调试器进行运行。

四、dotnet run 支持的选项

  1. --project

    如果你不在项目的根目录中运行 dotnet run,可以使用 --project 参数指定要运行的 .csproj 文件路径。例如:

    bash 复制代码
    dotnet run --project /path/to/your/project/YourProject.csproj
  2. --configuration

    通过 --configuration 参数可以指定构建配置,如 DebugRelease。例如:

    bash 复制代码
    dotnet run --configuration Release
  3. --no-build

    如果你已经构建了项目,并且只想运行已构建的应用,可以使用 --no-build 参数跳过构建步骤,只直接运行已编译的程序:

    bash 复制代码
    dotnet run --no-build
  4. --framework

    如果你的项目支持多个目标框架(例如 netcoreapp3.1net5.0),可以通过 --framework 参数指定要运行的框架。例如:

    bash 复制代码
    dotnet run --framework net5.0
  5. --runtime

    如果你的应用程序需要为特定的操作系统或架构构建,可以使用 --runtime 参数指定目标运行时。例如:

    bash 复制代码
    dotnet run --runtime linux-x64
  6. --verbose

    使用 --verbose 参数可以启用详细输出,查看命令执行过程中的详细日志信息。此选项有助于调试构建或运行时问题:

    bash 复制代码
    dotnet run --verbose
  7. 环境变量

    可以通过环境变量来配置应用程序的运行行为。例如:

    bash 复制代码
    ASPNETCORE_ENVIRONMENT=Production dotnet run

    上面的命令将把应用程序的环境设置为生产模式。

五、项目结构与 dotnet run

dotnet run 依赖于项目的结构,尤其是 .csproj 文件。dotnet run 会自动识别当前目录下的 .csproj 文件,并以该文件为依据进行构建和运行。

  • 单项目结构 :如果项目结构中只有一个 .csproj 文件,dotnet run 会自动识别并运行该项目。
  • 多项目解决方案 :如果解决方案中包含多个项目,你可以通过 --project 参数指定具体要运行的项目文件,避免默认运行错误的项目。

六、dotnet run 与调试

在 Visual Studio 和 Visual Studio Code 中,dotnet run 可以与调试功能结合使用。通过 IDE,开发者可以轻松地设置断点、监视变量等进行调试。但在命令行中,dotnet run 不直接集成调试功能,而是需要与外部调试工具结合使用。

例如,使用 Visual Studio Code 时,dotnet run 可以通过设置 launch.json 配置来启动调试会话,IDE 会自动启动 dotnet run 命令并附加调试器。

七、dotnet run 与其他 .NET CLI 命令的关系

在开发过程中,dotnet run 常常与其他 .NET CLI 命令一起使用:

  1. dotnet build :编译项目,生成中间语言(IL)文件。dotnet run 实际上隐式调用了 dotnet build,但可以单独执行 dotnet build 来先进行构建。

  2. dotnet restore :恢复项目的 NuGet 依赖项。dotnet run 会在需要时自动调用 dotnet restore

  3. dotnet publish :用于发布应用程序到目标环境(例如生产服务器)。dotnet publish 会生成可部署的输出,包括所有依赖项和配置文件。

  4. dotnet test :执行测试。对于测试项目,dotnet run 并不适用,但 dotnet test 用于运行单元测试。

八、跨平台支持

dotnet run 是完全跨平台的,支持在 WindowsLinuxmacOS 上运行。它会根据系统的环境自动选择合适的运行时和架构。因此,开发者可以使用相同的命令在不同的操作系统中运行应用程序。

  • 在 Windows 上,它通常依赖 .NET Core 或 .NET 5/6+ 的 Windows 版本。
  • 在 Linux 或 macOS 上,它可以运行基于 Kestrel 的 Web 应用程序,或者运行控制台应用。

九、dotnet run 的性能和优化

尽管 dotnet run 是开发中常用的命令,但它并不适合用于生产环境,因为:

  • 在运行时,dotnet run 会每次都进行编译,这会导致启动时间较长。在生产环境中,通常使用 dotnet publish 来生成发布包,并直接运行已发布的应用。
  • 对于大规模生产部署,dotnet run 不提供如负载均衡、容错等生产环境所需的特性。

在开发阶段,dotnet run 能够提供快速的反馈循环,适合频繁的代码修改和测试。但在生产环境中,通常会先执行 dotnet publish,然后使用合适的 Web 服务器(如 Kestrel + Nginx 或 IIS)来托管应用。

十、总结

dotnet run 是 .NET 开发过程中一个非常有用的命令,它简化了构建和运行的流程,使开发者能够快速启动和测试应用程序。它适用于开发和调试阶段,尤其是在小型应用和本地开发环境中。

主要特点:

  • 自动构建、恢复依赖项并运行应用程序。
  • 支持多平台(Windows、Linux、macOS)。
  • 可以与调试工具集成,在开发阶段提供快速反馈。
  • 适合开发和测试阶段,不适合生产环境中的大规模部署。

通过合理地使用 dotnet run,开发者可以提高开发效率,并在本地快速验证应用程序的功能。

相关推荐
岩屿1 小时前
Ubuntu下安装Docker并部署.NET API(二)
运维·docker·容器·.net
码云数智-大飞1 小时前
.NET 中高效实现 List 集合去重的多种方法详解
.net
easyboot2 小时前
使用tinyply.net保存ply格式点云
.net
张人玉2 小时前
WPF 多语言实现完整笔记(.NET 4.7.2)
笔记·.net·wpf·多语言实现·多语言适配
波波0071 天前
Native AOT 能改变什么?.NET 预编译技术深度剖析
开发语言·.net
Crazy Struggle2 天前
.NET 中如何快速实现 List 集合去重?
c#·.net
极客智造2 天前
ImageSharp 实战应用指南:.NET 跨平台图像处理落地实践
图像处理·.net
时光追逐者2 天前
一个基于 .NET + Vue 实现的通用权限管理平台(RBAC模式),前后端分离模式,开箱即用!
前端·vue.js·c#·.net·.net core
大黄说说2 天前
在 .NET Aspire 项目中集成 AgileConfig 实现统一配置管理
.net