dotnet run

本文适用于:✔️ .NET 6 SDK 及更高版本

“属性”

dotnet run - 无需任何显式编译或启动命令即可运行源代码。

摘要

dotnet run [<applicationArguments>]
  [-a|--arch <ARCHITECTURE>] [--artifacts-path <ARTIFACTS_DIR>]
  [-c|--configuration <CONFIGURATION>] [-e|--environment <KEY=VALUE>]
  [--file <FILE_PATH>] [-f|--framework <FRAMEWORK>] [--force] [--interactive]
  [--launch-profile <NAME>] [--no-build] [--no-dependencies]
  [--no-launch-profile] [--no-restore] [--os <OS>] [--project <PATH>]
  [-r|--runtime <RUNTIME_IDENTIFIER>] [--tl:[auto|on|off]]
  [-v|--verbosity <LEVEL>] [[--] [application arguments]]

dotnet run -h|--help

描述

dotnet run 命令为从源代码使用一个命令运行应用程序提供了一个方便的选项。 这对从命令行中进行快速迭代开发很有帮助。 命令取决于生成代码的 dotnet build 命令。 生成的任何要求 dotnet run 也适用于此版本。

注意

dotnet run 不遵守 /property:property=value 等参数,dotnet build 遵守这些参数。

输出文件会写入到默认位置,即 bin/<configuration>/<target>。 例如,如果具有 netcoreapp2.1 应用程序并且运行 dotnet run,则输出置于 bin/Debug/netcoreapp2.1。 将根据需要覆盖文件。 临时文件将置于 obj 目录。

如果该项目指定多个框架,在不使用 dotnet run 选项指定框架时,执行 -f|--framework <FRAMEWORK> 将导致错误。

在项目上下文,而不是生成程序集中使用 dotnet run 命令。 如果尝试改为运行依赖于框架的应用程序 DLL,则必须在不使用命令的情况下使用 dotnet。 例如,若要运行 myapp.dll,请使用:

dotnet myapp.dll

有关驱动程序的详细信息 dotnet ,请参阅 .NET CLI 概述

若要运行应用程序,dotnet run 命令需从 NuGet 缓存解析共享运行时之外的应用程序依赖项。 因为它使用缓存的依赖项,因此,不推荐在生产中使用 dotnet run 来运行应用程序。 相反,使用 命令dotnet publish,并部署已发布的输出。

隐式还原

无需运行 dotnet restore,因为它由所有需要还原的命令隐式运行,如 dotnet newdotnet builddotnet rundotnet testdotnet publishdotnet pack。 若要禁用隐式还原,请使用 --no-restore 选项。

在执行显式还原有意义的某些情况下,例如 dotnet restore中,或在需要显式控制还原发生时间的生成系统中,dotnet restore 命令仍然有用。

有关如何使用 NuGet 源的信息,请参阅 dotnet restore 文档

以长格式传入时,此命令支持 dotnet restore 选项(例如,--source)。 不支持缩写选项,例如 -s

工作负载清单下载

运行此命令时,它将为工作负载启动播发清单的异步后台下载。 如果此命令完成后,下载仍在运行,则将停止下载。 有关详细信息,请参阅播发清单

Arguments

<applicationArguments>

传递给正在运行的应用程序的参数。

任何无法识别的参数 dotnet run 都传递给应用程序。 若要将应用程序的自变量与参数 dotnet run 分开,请使用 -- 该选项。

选项

  • --

    将参数分隔到正在运行的应用程序的参数的 dotnet run。 在此分隔符后的所有参数均传递给已运行的应用程序。

  • -a|--arch <ARCHITECTURE>

    指定目标体系结构。 这是用于设置运行时标识符 (RID) 的简写语法,其中提供的值与默认 RID 相结合。 例如,在 win-x64 计算机上,指定 --arch x86 会将 RID 设置为 win-x86。 如果使用此选项,请不要使用 -r|--runtime 选项。 从 .NET 6 Preview 7 开始提供。

  • --artifacts-path <ARTIFACTS_DIR>

    执行命令中的所有生成输出文件都将位于指定路径下的子文件夹中,由项目分隔。 有关详细信息,请参阅 Artifacts 输出布局。 自 .NET 8 SDK 起可用。

  • -c|--configuration <CONFIGURATION>

    定义生成配置。 大多数项目的默认配置为 Debug,但你可以覆盖项目中的生成配置设置。

  • --disable-build-servers

    强制运行命令以忽略任何永久性生成服务器。 此选项提供一种一致的方法来禁止对生成缓存的所有使用,这会强制从头开始生成。 当缓存可能由于某种原因而损坏或不正确时,不依赖缓存的生成非常有用。 自 .NET 7 SDK 起可用。

  • -e|--environment <KEY=VALUE>

    设置将由命令运行的进程中的指定环境变量。 指定的环境变量 应用于 dotnet run 进程。

    通过此选项传递的环境变量优先于环境环境变量、System.CommandLine env 指令以及 environmentVariables 所选启动配置文件中的环境变量。 有关详细信息,请参阅环境变量

    (已在 .NET SDK 9.0.200 中添加此选项。

  • -f|--framework <FRAMEWORK>

    使用指定框架生成并运行应用。 框架必须在项目文件中进行指定。

  • --file <FILE_PATH>

    要运行的基于文件的应用的路径。 如果未指定路径,则当前目录用于查找并运行文件。 有关基于文件的应用的详细信息,请参阅 生成基于文件的 C# 应用

    在 Unix 上,可以使用命令行上的源文件名称而不是 dotnet run命令行直接运行基于文件的应用。 首先,确保文件具有执行权限。 然后,添加 shebang 行 #! 作为文件的第一行,例如:

    #!/usr/bin/env dotnet run
    

    然后,可以直接从命令行运行该文件:

    ./ConsoleApp.cs
    

    .NET SDK 10.0.100 中引入。

  • --force

    强制解析所有依赖项,即使上次还原已成功,也不例外。 指定此标记等同于删除 project.assets.json 文件。

  • --interactive

    允许命令停止并等待用户输入或操作。 例如,完成身份验证。 自 .NET Core 3.0 SDK 起可用。

  • --launch-profile <NAME>

    启动应用程序时要使用的启动配置文件(若有)的名称。 启动配置文件在 launchSettings.json 文件中进行定义,通常称为 DevelopmentStaging 。 有关详细信息,请参阅使用多个环境

  • --no-build

    运行前不生成项目。 还将隐式设置 --no-restore 标记。

  • --no-cache

    跳过最新的检查,并在运行之前始终生成程序。

  • --no-dependencies

    当使用项目到项目 (P2P) 引用还原项目时,还原根项目,不还原引用。

  • --no-launch-profile

    不尝试使用 launchSettings.json 配置应用程序 。

  • --no-restore

    运行此命令时不执行隐式还原。

  • --no-self-contained

    将应用程序发布为依赖于框架的应用程序。 必须在目标计算机上安装兼容的 .NET 运行时才能运行应用程序。

  • --os <OS>

    指定目标操作系统 (OS)。 这是用于设置运行时标识符 (RID) 的简写语法,其中提供的值与默认 RID 相结合。 例如,在 win-x64 计算机上,指定 --os linux 会将 RID 设置为 linux-x64。 如果使用此选项,请不要使用 -r|--runtime 选项。 自 .NET 6 之后可用。

  • --project <PATH>

    指定要运行的项目文件的路径(文件夹名称或完整路径)。 如果未指定,则默认为当前目录。

    从 .NET 6 SDK 开始,-p 的缩写 --project 已弃用。 在有限的时间内, -p 尽管弃用警告,仍可用于 --project 。 如果为选项提供的参数不包含 =,则命令将接受 -p 的短格式 --project。 否则,命令会假设 -p--property 的短格式。 在 .NET 7 中将逐渐淘汰这种灵活使用 -p 来表示 --project 的做法。

  • --property:<NAME>=<VALUE>

    设置一个或多个 MSBuild 属性。 指定以分号分隔的多个属性,或通过重复该选项指定多个属性:

    --property:<NAME1>=<VALUE1>;<NAME2>=<VALUE2>
    --property:<NAME1>=<VALUE1> --property:<NAME2>=<VALUE2>
    

    短格式 -p 可用于 --property。 如果为选项提供的参数包含 =,则接受 -p 作为 --property 的短格式。 否则,命令会假设 -p--project 的短格式。

    若要将 --property 传递给应用程序而不是设置 MSBuild 属性,请在 -- 语法分隔符后面提供该选项,例如:

    dotnet run -- --property name=value
    
  • -r|--runtime <RUNTIME_IDENTIFIER>

    指定要为其还原包的目标运行时。 有关运行时标识符 (RID) 的列表,请参阅 RID 目录

  • -sc|--self-contained

    使用应用程序发布 .NET 运行时,以便无需在目标系统上安装运行时。 默认值为 false。 但是,当面向 .NET 7 或更低版本时,默认值为 true 指定运行时标识符。

  • --tl:[auto|on|off]

    指定是否应将 终端记录器 用于生成输出。 默认值为 auto,它首先验证环境,然后再启用终端日志记录。 在启用新的记录器之前,环境检查会验证终端能否使用新式输出功能,并且不使用重定向的标准输出。 on 跳过环境检查并启用终端日志记录。 off 跳过环境检查并使用默认控制台记录器。

    终端记录器显示还原阶段,后跟生成阶段。 在每个阶段,当前生成项目显示在终端的底部。 每个正在生成的项目都会输出当前正在生成的 MSBuild 目标,以及在该目标上花费的时间。 可以搜索此信息以了解有关生成的详细信息。 项目生成完成后,将会编写一个“已完成生成”部分以捕获以下内容:

    • 生成项目的名称。
    • 目标框架(如果是多目标)。
    • 该生成的状态。
    • 该生成的主要输出(它设置了超链接)。
    • 为该项目生成的任何诊断。

    此选项从 .NET 8 开始可用。

  • -v|--verbosity <LEVEL>

    设置命令的详细级别。 允许使用的值为 q[uiet]m[inimal]n[ormal]d[etailed]diag[nostic]。 默认值为 minimal。 有关详细信息,请参阅 LoggerVerbosity

  • -?|-h|--help

    打印出有关如何使用命令的说明。

环境变量

可通过四种机制将环境变量应用于启动的应用程序:

  1. 运行命令时,作系统的环境环境变量。
  2. System.CommandLine env 指令,如 [env:key=value]. 这些内容适用于整个过程 dotnet run ,而不仅仅是由 dotnet run其运行的项目。
  3. environmentVariables从项目 -lp所选的启动配置文件 ()(如果有)。 这些内容适用于正在由其运行 dotnet run的项目。
  4. -e|--environment CLI 选项值(在 .NET SDK 版本 9.0.200 中添加)。 这些内容适用于正在由其运行 dotnet run的项目。

环境按与此列表相同的顺序构造,因此 -e|--environment 该选项具有最高优先级。

示例

  • 运行当前目录中的项目:

    dotnet run
    
  • 在当前目录中运行基于文件的指定应用:

    dotnet run --file ConsoleApp.cs
    

    .NET SDK 10.0.100 中添加了基于文件的应用支持。

  • 运行指定的项目:

    dotnet run --project ./projects/proj1/proj1.csproj
    
  • 运行当前目录中的项目,并指定 Release 配置:

    dotnet run --property:Configuration=Release
    
  • 运行当前目录中的项目(在本例中,--help 参数被传递到应用程序,因为使用了空白的 -- 选项):

    dotnet run --configuration Release -- --help
    
  • 在仅显示最小输出的当前目录中还原项目的依赖项和工具,然后运行项目:

    dotnet run --verbosity m
    
  • 使用指定的框架在当前目录中运行项目,并将参数传递给应用程序:

    dotnet run -f net6.0 -- arg1 arg2
    

    在以下示例中,将三个参数传递给应用程序。 使用 -一个参数传递,两个参数在以下之后 --传递:

    dotnet run -f net6.0 -arg1 -- arg2 arg3