位置: 文档库 > C#(.NET) > .NET Core CLI工具文档dotnet-run

.NET Core CLI工具文档dotnet-run

星星躲云2110 上传于 2025-06-15 12:37

.NET Core CLI工具文档:dotnet-run

在.NET Core开发生态中,命令行接口(CLI)是开发者与框架交互的核心工具。其中dotnet-run作为项目构建与运行的快捷命令,凭借其高效性和灵活性,成为开发、调试和测试场景下的首选工具。本文将从基础用法到高级场景,全面解析dotnet-run的功能、配置选项及最佳实践,帮助开发者充分利用这一工具提升开发效率。

一、dotnet-run的核心功能

dotnet-run是.NET Core SDK提供的跨平台命令,用于直接编译并运行C#项目。其核心价值在于将传统的“编译-运行”两步操作合并为一步,显著简化开发流程。与直接调用dotnet build后运行程序相比,dotnet-run具有以下优势:

  • 自动化构建:无需手动执行编译,自动检测项目变更并重新生成。
  • 依赖管理:自动还原NuGet包,确保运行环境完整。
  • 调试支持:可与调试器(如VS Code或Visual Studio)无缝集成。
  • 跨平台兼容:在Windows、macOS和Linux上行为一致。

二、基础用法与参数详解

1. 基本命令格式

在项目根目录下执行以下命令即可运行程序:

dotnet run

该命令会隐式调用dotnet build,若项目未构建则先执行编译,随后启动应用程序。

2. 常用参数

参数 说明 示例
--project 指定项目文件路径(支持.csproj或.sln) dotnet run --project src/MyApp.csproj
--configuration 指定构建配置(Debug/Release) dotnet run --configuration Release
--framework 多目标框架时指定运行框架 dotnet run --framework net6.0
--launch-profile 使用launchSettings.json中的配置 dotnet run --launch-profile "IIS Express"
-p|--project (简写)指定项目路径 dotnet run -p tests/MyTests.csproj

3. 传递参数给应用程序

若需将参数传递给运行的应用程序,需在dotnet run后以双横线--分隔CLI参数和应用程序参数:

dotnet run -- --input "test.txt" --verbose

在程序中可通过args参数接收:

// Program.cs
var args = Environment.GetCommandLineArgs();
// 或使用主方法参数(.NET 6+ Top-level Statements)
var appArgs = args.Skip(1).ToArray(); // 跳过"dotnet"和"run"

三、高级场景与最佳实践

1. 多项目解决方案中的运行

在解决方案(.sln)包含多个项目时,需通过--project明确指定启动项目:

dotnet run --project src/WebApi/WebApi.csproj

或修改解决方案文件,将目标项目设为启动项目(通过IDE或手动编辑.sln文件)。

2. 环境变量配置

可通过--environment参数设置ASP.NET Core的运行环境(如Development/Production):

dotnet run --environment Development

或通过launchSettings.json配置多环境启动参数:

{
  "profiles": {
    "MyApp": {
      "commandName": "Project",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      }
    }
  }
}

3. 调试集成

在VS Code中,可通过.vscode/launch.json配置调试任务:

{
  "version": "0.2.0",
  "configurations": [
    {
      "name": ".NET Core Launch",
      "type": "coreclr",
      "request": "launch",
      "preLaunchTask": "build",
      "program": "${workspaceFolder}/bin/Debug/net6.0/MyApp.dll",
      "args": [],
      "cwd": "${workspaceFolder}",
      "console": "integratedTerminal"
    }
  ]
}

或直接使用dotnet run的调试模式:

dotnet run --no-build

(需配合调试器附加到进程)

4. 性能优化技巧

  • 禁用重新编译:使用--no-build避免重复构建(适用于已构建项目):
dotnet run --no-build
  • 指定输出目录:通过-o|--output控制生成位置:
  • dotnet run --output ./bin/custom
  • 并行构建:在多核机器上启用并行编译(通过MSBuild参数):
  • dotnet run /p:ParallelBuild=true

    四、常见问题与解决方案

    1. 端口冲突错误

    当运行Web应用时,若端口被占用会报错:

    Unhandled exception. Microsoft.AspNetCore.Server.Kestrel: Unable to start Kestrel.

    解决方案:

    • 终止占用端口的进程:
    # Windows
    netstat -ano | findstr :5000
    taskkill /PID  /F
    
    # macOS/Linux
    lsof -i :5000
    kill -9 
  • 修改应用端口(通过代码或环境变量):
  • // Program.cs
    WebApplication.CreateBuilder(args)
      .ConfigureKestrel(options => options.ListenAnyIP(8080));

    2. 依赖还原失败

    错误示例:

    error NU1101: Unable to find package Newtonsoft.Json

    解决方案:

    • 手动还原NuGet包:
    dotnet restore
  • 检查NuGet源配置(NuGet.Config文件)
  • 3. 多目标框架选择

    当项目支持多个框架(如net6.0和net7.0)时,需显式指定:

    dotnet run --framework net7.0

    五、与开发工作流的集成

    1. 自动化脚本示例

    以下是一个完整的构建-运行-测试脚本(PowerShell):

    param (
      [string]$config = "Debug",
      [string]$framework = "net7.0"
    )
    
    Write-Host "Restoring packages..." -ForegroundColor Cyan
    dotnet restore
    
    Write-Host "Building project ($config/$framework)..." -ForegroundColor Cyan
    dotnet build --configuration $config --framework $framework --no-restore
    
    if ($LASTEXITCODE -eq 0) {
      Write-Host "Running application..." -ForegroundColor Green
      dotnet run --configuration $config --framework $framework --no-build
    } else {
      Write-Host "Build failed!" -ForegroundColor Red
    }

    2. CI/CD中的使用

    在GitHub Actions中可这样配置:

    name: .NET CI
    
    on: [push]
    
    jobs:
      build-and-test:
        runs-on: ubuntu-latest
        steps:
        - uses: actions/checkout@v3
        - name: Setup .NET
          uses: actions/setup-dotnet@v2
          with:
            dotnet-version: '7.0.x'
        - name: Restore dependencies
          run: dotnet restore
        - name: Build
          run: dotnet build --no-restore
        - name: Run
          run: dotnet run --no-build

    六、版本兼容性与迁移指南

    不同.NET Core版本中dotnet-run的行为差异:

    版本 变更点
    .NET Core 2.1 引入--launch-profile参数
    .NET 5 默认使用集成终端输出
    .NET 6+ 支持Top-level Statements的参数传递

    从.NET Framework迁移时需注意:

    • 移除project.json,改用.csproj格式
    • 全局工具需通过dotnet tool install安装

    七、总结与展望

    dotnet-run作为.NET Core开发的核心工具,通过持续优化已支持从简单控制台应用到复杂微服务架构的快速迭代。未来版本可能进一步集成:

    • AI辅助的错误诊断
    • 更细粒度的资源监控
    • 与云原生工具链的深度整合

    开发者应熟练掌握其高级功能,结合CI/CD和本地调试工作流,构建高效、可靠的.NET应用开发体系。

    关键词:.NET Core CLI、dotnet-run、命令行工具项目构建调试运行跨平台开发NuGet依赖、环境变量、多目标框架、CI/CD集成

    简介:本文全面解析.NET Core CLI中的dotnet-run命令,涵盖基础用法、参数详解、高级场景(多项目运行、环境配置、调试集成)、性能优化技巧及常见问题解决方案,并提供自动化脚本和CI/CD配置示例,帮助开发者高效利用该工具提升开发效率。