本文適用於: ✔️ .NET 6 SDK 及後續版本
名稱
dotnet run - 執行原始程式碼,而不需要有任何明確的編譯或啟動命令。
概要
dotnet run [<applicationArguments>]
[-a|--arch <ARCHITECTURE>] [--artifacts-path <ARTIFACTS_DIR>]
[-c|--configuration <CONFIGURATION>] [--disable-build-servers]
[-e|--environment <KEY=VALUE>] [--file <FILE_PATH>]
[-f|--framework <FRAMEWORK>] [--force] [--interactive]
[-lp|--launch-profile <NAME>] [--no-build] [--no-cache]
[--no-dependencies] [--no-launch-profile] [--no-restore] [--os <OS>]
[-p|--property:<PROPERTYNAME>=<VALUE>]
[--project <PATH>] [-r|--runtime <RUNTIME_IDENTIFIER>]
[--sc|--self-contained] [--tl:[auto|on|off]] [-v|--verbosity <LEVEL>]
[[--] [application arguments]]
dotnet run -h|--help
描述
dotnet run 命令提供方便的選項,以使用一個命令透過原始程式碼來執行應用程式。 其適合從命令列進行的快速反覆式開發法。 此命令仰賴 dotnet build 命令來建置程式碼。 組建 dotnet run 的任何需求也適用於 。
輸出檔會寫入至預設位置,也就是 bin/<configuration>/<target>。 例如,如果您有 netcoreapp2.1 應用程式並執行 dotnet run,輸出將會放置在 bin/Debug/netcoreapp2.1 中。 而且會視需要覆寫檔案。 暫存檔案會放置在 obj 目錄中。
如果專案指定多個架構,執行 dotnet run 會導致錯誤,除非使用 -f|--framework <FRAMEWORK> 選項來指定架構。
dotnet run 命令用於專案內容中,而非已建置的組件。 如果您改為嘗試執行與 Framework 相依的應用程式 DLL,您必須不透過命令使用 dotnet。 例如,若要執行 myapp.dll,使用︰
dotnet myapp.dll
欲了解更多關於 dotnet 驅動程式的資訊,請參閱 .NET CLI overview。
為了執行應用程式,dotnet run 命令會從 NuGet 快取解析共用執行階段之外的應用程式相依性。 因為它會使用快取相依性,不建議您在生產環境中使用 dotnet run 執行應用程式。 相反地,使用 命令dotnet publish,並部署已發佈的輸出。
隱含還原
您不必執行 dotnet restore,因為其會由需要進行還原的所有命令隱含執行,例如 dotnet new、dotnet build、dotnet run、dotnet test、dotnet publish 和 dotnet pack。 若要停用隱含還原,請使用 --no-restore 選項。
如需了解如何管理 NuGet 摘要,請參閱 dotnet restore 文件。
此命令支援以完整形式傳入的 dotnet restore 選項 (例如 --source)。 不支援簡短形式選項,例如 -s。
工作負載資訊清單下載
執行此命令會啟動工作負載公告資訊清單的非同步背景下載。 若此命令完成時下載仍在執行,則會停止下載。 如需詳細資訊,請參閱廣告資訊清單。
啟動設定檔
啟動設定檔會在開發過程中設定應用程式的啟動 dotnet run 方式。 對於 SDK 風格的專案,設定設定設在 Properties/launchSettings.json。 Visual Basic 專案則使用My Project/launchSettings.json。
基於檔案的應用程式可以在原始檔案旁邊使用檔案 [ApplicationName].run.json 。 關於檔案查詢順序與範例,請參見基於 檔案應用程式的啟動設定檔。
啟動設定檔案包含一個頂層 profiles 物件。 每個 profiles 屬性定義一個命名剖面:
{
"profiles": {
"Local": {
"commandName": "Project",
"commandLineArgs": "--input sample.txt",
"dotnetRunMessages": true,
"environmentVariables": {
"APP_MODE": "local"
}
}
}
}
.NET SDK 的啟動設定解析器接受 JSON 註解和後置逗號。
選取設定檔
請使用 --launch-profile <NAME> 以選擇一個命名的個人檔案。 名稱匹配不區分大小寫。 僅依案情不同而不同的個人檔案名稱則是歧義且會產生錯誤。
如果你沒指定名稱,就會 dotnet run 依照檔案順序選擇第一個支援的 commandName 設定檔。 用 --no-launch-profile 來跳過啟動設定檔案。
套用設定檔時 dotnet run ,會設定 DOTNET_LAUNCH_PROFILE 為啟動程序中選定的設定檔名稱。 後續的環境變數來源可以覆寫該值。
支援的配置檔類型
.NET SDK 支援這些commandName值。dotnet run 數值是區分大小寫的。
commandName |
行為 |
|---|---|
Project |
建立專案並啟動專案產生的指令。 |
Executable |
啟動由 所 executablePath指定的指令。 除非你特別說明 --no-build,否則 仍然 dotnet run 會先建置專案。 |
通用屬性
dotnet run 對兩種支援的配置檔類型都承認以下屬性:
dotnet run 擴充 %NAME% 支援字串值中的環境變數參考。 在 .NET 11 及更新版本中,它也會擴展 MSBuild 屬性的參考,並用來啟動程序的值,使用與 Visual Studio 相同的權杖替換。 它不會擴展殼式 $NAME 的參考。
| Property | 行為 |
|---|---|
commandLineArgs |
明確提出啟動程序的論點。 命令列上的明確應用程式參數優先。 對於設定Project檔,project 提供的參數也會優先使用。 |
environmentVariables |
指定啟動程序的環境變數。 設定檔值會覆蓋繼承的及 SDK 產生的環境變數,值 -e\|--environment 則覆蓋設定檔值。 |
dotnetRunMessages |
當 true, Building... 列印 先 dotnet run 建構專案。 預設為 false。 這個屬性並不控制識別啟動設定檔案的訊息。 |
用於 environmentVariables 套用具有環境變數表單的開發時執行時設定設定。 例如,設定檔可以設定 GC 設定,例如 DOTNET_gcServer。 關於可用的設定、環境變數名稱及優先順序規則,請參閱 .NET 執行時設定設定及垃圾回收執行時設定選項。
並非每個執行時設定都有環境變數形式。 若要獨立於啟動設定檔配置應用程式,請在專案中使用 MSBuild 屬性或 RuntimeHostConfigurationOption 項目,或使用 runtimeconfig.template.json 檔案。 部分設定也可以在程式碼中更改。AppContext.SetSwitch 這些機制會產生或修改應用程式的執行時設定;它們不是額外的 launchSettings.json 財產。
Project 屬性
dotnet run 當 commandName 為 時 Project,能辨識這些額外性質:
| Property | 行為 |
|---|---|
applicationUrl |
在啟動過程中的套裝 ASPNETCORE_URLS 。
ASPNETCORE_URLS一個 in environmentVariables 或 from -e\|--environment 的值優先。 |
launchBrowser |
告訴啟動工具是否要開啟瀏覽器。
dotnet run 在解析後的設定檔中保留此特性,但不會開啟瀏覽器。 |
launchUrl |
告訴啟動工具該開啟哪個網址。
dotnet run 在解析後的設定檔中保留此特性,但不會開啟瀏覽器或使用該網址。 |
此行為支援 applicationUrl ASP.NET Core,但啟動設定檔及其他常見屬性適用於任何可執行的 SDK 風格 .NET 專案。
Executable 屬性
dotnet run 當 commandName 為 時 Executable,能辨識這些額外性質:
| Property | 行為 |
|---|---|
executablePath |
Required. 指定開始的流程。 SDK 會擴充支援的變數參考,但不會解析啟動設定檔案的相對值。 使用作業系統能找到的絕對路徑或指令。 |
workingDirectory |
Optional. 指定啟動程序的工作目錄。 SDK 擴充支援的變數參考,並針對包含啟動設定檔案的目錄解析相對路徑。 如果你省略了這個屬性,工作目錄就會預設為包含專案或檔案應用程式的目錄。 |
Visual Studio 與除錯器擴充功能
launchSettings.json 是一種共享輸入格式,但每個消費者決定要支援哪些值以及如何解讀它們。 Visual Studio、除錯器及其他工具能辨識比 commandName . 更多的值與屬性dotnet run。
下表比較了該dotnet run合約與 Visual Studio 中常見的 .NET 專案系統行為:
| 設定或行為 | dotnet run |
Visual Studio |
|---|---|---|
| 支援的配置檔類型 | 支援 Project 與 Executable。 |
支撐 Project、 Executable,以及一個空的 commandName。 已安裝的專案系統擴充功能可以新增其他設定檔類型。 |
| 變數展開 | 擴展 %NAME% 環境變數參考。 在 .NET 11 及更新版本中,也擴充了 MSBuild 屬性的參考,並用於啟動程序。 |
擴充環境變數與 MSBuild 屬性,包括 executablePath、 commandLineArgs、 workingDirectorylaunchUrl、 環境變數值及字串值擴充設定。 |
commandLineArgs 的 Project |
只有在專案沒有提供執行參數且你沒有在命令列傳遞應用程式參數時,才會使用設定檔值。 | 將 profile 值附加到專案的執行參數後面。 |
workingDirectory 的 Project |
忽略該物業。 | 支撐著房產。 相對路徑是相對於專案目錄的。 |
workingDirectory 的 Executable |
相對路徑是相對於包含啟動設定檔案的目錄。 若省略,路徑預設為專案或基於檔案的應用程式目錄。 | 相對路徑是相對於專案目錄的。 若省略,路徑預設為輸出目錄(若該目錄存在),否則則為專案目錄。 |
親屬關係 executablePath |
將值傳給作業系統,而不重新建立基礎。 | 透過設定檔工作目錄中的路徑元件解析一個值。 對於裸執行檔名稱,Visual Studio 會先檢查自己目前的目錄,然後 PATH。 |
launchBrowser 與 launchUrl |
會保留解析後設定檔的數值,但不會開啟瀏覽器。 | 讓發射提供者能取得這些數值。 例如,ASP.NET Core 工具可以開啟瀏覽器。 |
applicationUrl |
設定 ASPNETCORE_URLS。 |
讓該價值可供已安裝的啟動服務提供者使用,例如 ASP.NET Core 工具。 |
dotnetRunMessages |
控制訊息。Building... |
它沒有用這個屬性來控制 Visual Studio 的輸出。 |
| 除錯器屬性 | 忽略除錯器特有的特性。 | 當專案與除錯器支援此功能時,會使用如 nativeDebugging、 sqlDebugging、 jsWebView2DebuggingremoteDebugEnabledhotReloadEnabled 、 等屬性。 |
在 .NET 11 及之後版本中,兩個消費者都會展開"$(ProjectDir)"。 在早期版本中,沒有單一 workingDirectory 值能同時識別兩個使用者的專案目錄。 Visual Studio 會展開 "$(ProjectDir)",並將其dotnet run視為文字,並解析包含啟動設定檔案目錄的相對路徑。 因此,使用".."約dotnet run定Properties/launchSettings.jsonMy Project/launchSettings.json或檔案。 Visual Studio 會將相同的值解析到專案目錄的父節點。
Windows Forms 和 WPF 應用程式不會新增其他dotnet run設定檔類型。 使用 Project 具有常見設定的設定檔,如 commandLineArgs 和 environmentVariables。 在 Visual Studio 中,這些桌面專案類型也能使用適用的除錯器屬性,例如nativeDebugging混合管理與原生除錯,或jsWebView2Debugging用於 WebView2。 瀏覽器與網址屬性只有在啟動提供者或應用程式使用時才會生效。
其他專案類型與 Visual Studio 工作負載可安裝啟動工具,新增設定型別或解讀額外屬性。 這些擴充功能不會新增支援: dotnet runCLI 在預設選擇時會跳過不支援的設定檔類型,當你明確選擇時會回報錯誤。
關於 Visual Studio 支援的除錯器設定與 project 介面,請參見 .NET C# 除錯設定的 Project 設定。
Arguments
<applicationArguments>
傳遞至正在執行之應用程式的引數。
任何無法辨識的 dotnet run 引數都會傳遞至應用程式。 若要將 的 dotnet run 引數與應用程式的引數分開,請使用 選項 -- 。
向應用程式提出前向參數
dotnet run 將任何不識別的標記轉發給應用程式。 轉發的代幣保留原始順序,但 dotnet run 首先移除它所理解的選項。 當已識別的選項出現在未識別的選項名稱與其價值之間時,移除已識別的選項可能會改變剩餘代幣的意義。
例如,以下指令將已識別的選項 --project 交錯於應用程式預期接收的標記間:
dotnet run --app-flag --app-name --project ConsoleApp.csproj A.txt
在 dotnet run 消耗 後 --project ConsoleApp.csproj,應用程式接收 --app-flag --app-name A.txt。 應用程式會將 A.txt 的值 --app-name視為 ,與原始命令列不符。
為避免此歧義,應用參數應置於字面值 --:
dotnet run --project ConsoleApp.csproj -- --app-flag --app-name A.txt
--分隔符會將後續的每個標記標記為應用程式參數,因此dotnet run不會重新排序或重新解釋它們。 分隔器同時也能讓腳本未來能針對未來可能與先前轉交給應用程式的代幣匹配的新 dotnet run 選項進行防護。
Note
同樣的行為也適用於Microsoftdotnet build 和 dotnet test。Testing.Platform (MTP) 模式,分別將未識別的標記轉發給 MSBuild 或測試應用程式。 欲了解更多相關 dotnet test資訊,請參閱「 向測試應用程式的前導參數」。
選項
--分隔
dotnet run的引數與執行中應用程式的引數。 此分隔符號之後的所有引數會傳遞至執行的應用程式。-
-a|--arch <ARCHITECTURE>指定目標結構。 這是用於設定執行階段識別碼 (RID) 的速記語法,其中提供的值會與預設 RID 合併。 例如在
win-x64機器上,指定--arch x86將 RID 設定為win-x86。 若使用此選項,請勿使用-r|--runtime選項。 自 .NET 6 預覽版 7 起可取得。 -
--artifacts-path <ARTIFACTS_DIR>執行命令的所有建置輸出檔案都會位於指定路徑下的子資料夾中,並以專案分隔。 如需詳細資訊,請參閱 成品輸出配置。 此選項及所提供的值必須在任何依賴其他
dotnet指令輸出的指令中明確串dotnet接,例如使用dotnet build --no-restore和dotnet publish --no-build時。 自 .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 上,透過新增 shebang (
#!) 指令並設定執行權限,直接使用檔名執行基於檔案的應用程式。 欲了解更多資訊,請參閱 Unix shebang (#!) 支援。於 .NET SDK 10.0.100 中引入。
--force即使最後的還原成功,仍強制解析所有相依性。 指定這個旗標等同於刪除 project.assets.json 檔案。
-
--interactive可讓命令停止,並等候使用者輸入或進行動作。 例如完成驗證。
-lp|--launch-profile <NAME>啟動應用程式時使用的啟動設定檔名稱。 欲了解更多資訊,請參閱 發射檔案。
--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>指定要執行的專案檔路徑 (資料夾名稱或完整路徑)。 如果未指定,則會預設為目前目錄。
-p縮寫--project已被棄用自 .NET 6 SDK 起。 在有限的時間內,-p儘管有棄用警告,但仍可以使用--project。 如果為選項提供的引數不包含=,命令會接受-p做為--project的縮寫。 否則,命令會假設-p是--property的縮寫。 這種靈活使用-p來處理--project的做法將於 .NET 7 年逐步淘汰。--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 執行時發佈給你的應用程式,這樣就不需要在目標機器上安裝執行時。
-
--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列印如何使用命令的描述。
環境變數
以下來源會將環境變數套用到啟動的應用程式:
- 執行指令時作業系統的環境環境變數。
- System.CommandLine
env指示詞,例如[env:key=value]. 這些適用於整個dotnet run流程,而不僅僅是 所執行dotnet run的專案。 - 這些數值由所選發射配置產生。
dotnet run集合 ,且applicationUrl在剖Project面中設定ASPNETCORE_URLS。DOTNET_LAUNCH_PROFILE -
environmentVariables如果有的話,來自 所選的發射設定檔。 這些適用於 所執行dotnet run的專案。 -
-e|--environmentCLI 選項值(.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在目前目錄中執行專案,並指定版本設定:
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