標籤:
使用 dotnet watch 開發 ASP.NET Core 應用程式
原文:Developing ASP.NET Core applications using dotnet watch
Victor Hurdugaci
翻譯:謝煬(Kiler)
校對:劉怡(AlexLEWIS)、許登洋(Seay)
介紹
dotnet watch 是一個開發階段在源檔案發生變動的情況下使用 dotnet 命令的工具。 當代碼發生變動的時候可以用來執行編譯,運行測試,或者發佈動作。
在本教程中,我們將使用一個現有的計算兩個數字之和以及乘積的 WebApi 應用程式來示範如何使用 dotnet watch 。應用程式範例故意包含一個錯誤,作為本教程的一部分我們會修複它。
開始入門
開始下載 樣本程式。樣本程式包含兩個項目, WebApp (Web 應用程式)以及 WebAppTests (Web 應用程式配套的單元測試項目)
在命令列控制台中,進入下載樣本程式的目錄並且運行下述命令:
1、dotnet restore
2、cd WebApp
3、dotnet run
控制台輸出將顯示如下資訊,表明該應用程式正在運行並等待請求:
複製代碼
$ dotnet runProject WebApp (.NETCoreApp,Version=v1.0) will be compiled because inputs were modifiedCompiling WebApp for .NETCoreApp,Version=v1.0Compilation succeeded. 0 Warning(s) 0 Error(s)Time elapsed 00:00:02.6049991Hosting environment: ProductionContent root path: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebAppNow listening on: http://localhost:5000Application started. Press Ctrl+C to shut down.
在 網頁瀏覽器中,導航到 http://localhost:5000/api/math/sum?a=4&b=5 頁面你會看到結果 9 。
如果你導航到 http://localhost:5000/api/math/product?a=4&b=5 頁面,你期望得到結果 20。但是實際上還是返回了 9 。
我們會修複這個問題的。
項目中添加
dotnet watch
1、按照下面例子的方式在 WebApp/project.json 檔案的 tools 配置節中添加 Microsoft.DotNet.Watcher.Tools 引用:
複製代碼
"tools": { "Microsoft.DotNet.Watcher.Tools": "1.0.0-preview2-final" //手工高亮},
2、運行 dotnet restore。
控制台輸出將顯示如下資訊:
複製代碼
log : Restoring packages for /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp/project.json...log : Restoring packages for tool ‘Microsoft.DotNet.Watcher.Tools‘ in /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp/project.json...log : Installing Microsoft.DotNet.Watcher.Core 1.0.0-preview2-final.log : Installing Microsoft.DotNet.Watcher.Tools 1.0.0-preview2-final.
使用
dotnet watch 運行
dotnet 命令
任何與 dotnet 有關的命令都可以以 dotnet watch 這樣的方式運行:例如:
| 命令 |
帶上 watch 的命令Command |
dotnet run |
dotnet watch run |
dotnet run -f net451 |
dotnet watch run -f net451 |
dotnet run -f net451 -- --arg1 |
dotnet watch run -f net451 -- --arg1 |
dotnet test |
dotnet watch test |
為了讓 WebApp 在 watcher 模式下運行,在 WebApp 目錄裡面運行 dotnet watch run 命令。 控制台輸出將顯示如下資訊,表明 dotnet watch 現在正在監控代碼檔案:
複製代碼
user$ dotnet watch run[DotNetWatcher] info: Running dotnet with the following arguments: run[DotNetWatcher] info: dotnet process id: 39746Project WebApp (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.Hosting environment: ProductionContent root path: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebAppNow listening on: http://localhost:5000Application started. Press Ctrl+C to shut down.
在
dotnet watch 模式進行修改
確認 dotnet watch 模式運行中。
讓我們來修複上面發現的那個兩個數相乘結果錯誤。
開啟檔案 WebApp/Controllers/MathController.cs。
我們故意在代碼中引入了錯誤。
複製代碼
public static int Product(int a, int b){ // We have an intentional bug here // + should be * return a + b;//手工高亮}
通過把代碼 a + b 替換為 a * b 修複錯誤。
儲存檔案。 控制台輸出將顯示如下資訊,表明 dotnet watch 檢測到檔案的改變並重啟了應用程式。
複製代碼
[DotNetWatcher] info: File changed: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp/Controllers/MathController.cs[DotNetWatcher] info: Running dotnet with the following arguments: run[DotNetWatcher] info: dotnet process id: 39940Project WebApp (.NETCoreApp,Version=v1.0) will be compiled because inputs were modifiedCompiling WebApp for .NETCoreApp,Version=v1.0Compilation succeeded. 0 Warning(s) 0 Error(s)Time elapsed 00:00:03.3312829Hosting environment: ProductionContent root path: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebAppNow listening on: http://localhost:5000Application started. Press Ctrl+C to shut down.
驗證 http://localhost:5000/api/math/product?a=4&b=5 連結返回正確的結果。
使用
dotnet watch 運行測試
檔案監控也能運行其他 dotnet 命令例如 test 或者 publish。
1、開啟 WebAppTests 目錄,確認 project.json 檔案中已經包含了 dotnet watch。
2、運行 dotnet watch test 命令。
如果你之前在 MathController 中修複了錯誤你會看到控制台輸出顯示如下資訊,否則你會看到測試失敗的資訊:
複製代碼
WebAppTests user$ dotnet watch test[DotNetWatcher] info: Running dotnet with the following arguments: test[DotNetWatcher] info: dotnet process id: 40193Project WebApp (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.Project WebAppTests (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.xUnit.net .NET CLI test runner (64-bit .NET Core osx.10.11-x64) Discovering: WebAppTests Discovered: WebAppTests Starting: WebAppTests Finished: WebAppTests=== TEST EXECUTION SUMMARY === WebAppTests Total: 2, Errors: 0, Failed: 0, Skipped: 0, Time: 0.259sSUMMARY: Total: 1 targets, Passed: 1, Failed: 0.[DotNetWatcher] info: dotnet exit code: 0[DotNetWatcher] info: Waiting for a file to change before restarting dotnet...
一旦所有的測試回合起來了,監控器會指示他在下一次重新啟動 dotnet test 前會等待一個檔案的變更。
3、開啟控制器 WebApp/Controllers/MathController.cs 檔案並且修改代碼。如果你沒有修複乘法錯誤,馬上修改。並儲存。
dotnet watch 將會檢測到檔案變更並且重新運行測試。 控制台輸出將顯示如下資訊:
複製代碼
[DotNetWatcher] info: File changed: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp/Controllers/MathController.cs[DotNetWatcher] info: Running dotnet with the following arguments: test[DotNetWatcher] info: dotnet process id: 40233Project WebApp (.NETCoreApp,Version=v1.0) will be compiled because inputs were modifiedCompiling WebApp for .NETCoreApp,Version=v1.0Compilation succeeded. 0 Warning(s) 0 Error(s)Time elapsed 00:00:03.2127590Project WebAppTests (.NETCoreApp,Version=v1.0) will be compiled because dependencies changedCompiling WebAppTests for .NETCoreApp,Version=v1.0Compilation succeeded. 0 Warning(s) 0 Error(s)Time elapsed 00:00:02.1204052xUnit.net .NET CLI test runner (64-bit .NET Core osx.10.11-x64) Discovering: WebAppTests Discovered: WebAppTests Starting: WebAppTests Finished: WebAppTests=== TEST EXECUTION SUMMARY === WebAppTests Total: 2, Errors: 0, Failed: 0, Skipped: 0, Time: 0.260sSUMMARY: Total: 1 targets, Passed: 1, Failed: 0.[DotNetWatcher] info: dotnet exit code: 0[DotNetWatcher] info: Waiting for a file to change before restarting dotnet...
返回目錄
使用 dotnet watch 開發 ASP.NET Core 應用程式