原文: "Developing ASP.NET Core applications using dotnet watch" 作者: "Victor Hurdugaci" 翻譯: "謝煬(Kiler)" 校對: "劉怡(AlexLEWIS)" 、 "許登洋(Seay)" 介紹 是一個開發階段在源文件發 ...
原文: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 run
Project WebApp (.NETCoreApp,Version=v1.0) will be compiled because inputs were modified
Compiling WebApp for .NETCoreApp,Version=v1.0
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:02.6049991
Hosting environment: Production
Content root path: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
在 Web 瀏覽器中,導航到 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: 39746
Project WebApp (.NETCoreApp,Version=v1.0) was previously compiled. Skipping compilation.
Hosting environment: Production
Content root path: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application 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: 39940
Project WebApp (.NETCoreApp,Version=v1.0) will be compiled because inputs were modified
Compiling WebApp for .NETCoreApp,Version=v1.0
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:03.3312829
Hosting environment: Production
Content root path: /Users/user/dev/aspnet/Docs/aspnet/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application 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: 40193
Project 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.259s
SUMMARY: 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: 40233
Project WebApp (.NETCoreApp,Version=v1.0) will be compiled because inputs were modified
Compiling WebApp for .NETCoreApp,Version=v1.0
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:03.2127590
Project WebAppTests (.NETCoreApp,Version=v1.0) will be compiled because dependencies changed
Compiling WebAppTests for .NETCoreApp,Version=v1.0
Compilation succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:02.1204052
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.260s
SUMMARY: Total: 1 targets, Passed: 1, Failed: 0.
[DotNetWatcher] info: dotnet exit code: 0
[DotNetWatcher] info: Waiting for a file to change before restarting dotnet...