使用文件观察程序开发 ASP.NET Core 应用Develop ASP.NET Core apps using a file watcher
dotnet watch 是一种在源文件更改时运行 命令的工具。例如,文件更改可能触发编译、测试执行或部署。
本教程使用一个现有 Web API 和两个终结点:分别返回两个数的总和以及乘积。乘积的方法有一个 bug,本教程将会对其进行修复。
下载示例应用。它包含两个项目:WebApp (ASP.NET Core Web API) 和 WebAppTests (用于 Web API 的单元测试)。
在命令行界面中,导航到 WebApp 文件夹 。运行下面的命令:
备注
可使用 来指定要运行的项目。例如,从示例应用的根路径运行 dotnet run —project WebApp
还会运行 WebApp 项目。
控制台输出会显示如下类似的消息(表示应用正在运行且正在等待请求):
$ dotnet run
Hosting environment: Development
Content root path: C:/Docs/aspnetcore/tutorials/dotnet-watch/sample/WebApp
Now listening on: http://localhost:5000
Application started. Press Ctrl+C to shut down.
在 Web 浏览器中,导航到 number>/api/math/sum?a=4&b=5
。应该会显示结果 9
。
导航到产品 API (http://localhost:<port number>/api/math/product?a=4&b=5
)。它会返回 9
,而不是所预期的 20
。本教程的后面部分将解决该问题。
- 将
Microsoft.DotNet.Watcher.Tools
包引用添加到 .csproj 文件 :
<ItemGroup>
<DotNetCliToolReference Include="Microsoft.DotNet.Watcher.Tools" Version="2.0.0" />
</ItemGroup>
使用 dotnet watch 运行 .NET Core CLI 命令Run .NET Core CLI commands using dotnet watch
dotnet watch
可用于运行任何 .NET Core CLI 命令例如:
运行“WebApp”文件夹中的 dotnet watch run
。控制台输出指示 watch
已启动。
备注
可使用 dotnet watch —project <PROJECT>
来指定要监视的项目。例如,从示例应用的根路径运行 还会运行并监视 WebApp 项目。
确保 dotnet watch
正在运行。
修复 MathController 的 Product
方法中的 bug,使其返回乘积而非总和 。
public static int Product(int a, int b)
{
return a * b;
}
保存该文件。控制台输出指示 dotnet watch
已检测到文件更改并已重启应用。
验证 number>/api/math/product?a=4&b=5
是否返回正确结果。
使用 dotnet watch 运行测试Run tests using dotnet watch
将 MathController.cs 的
Product
方法改回返回总和 。保存该文件。运行 。
运行
dotnet watch test
。其输出指示测试失败且观察程序正在等待文件更改:
Total tests: 2. Passed: 1. Failed: 1. Skipped: 0.
Test Run Failed.
- 修复
Product
方法代码,使其返回乘积。保存该文件。
dotnet watch
检测到文件更改并重新运行测试。控制台输出指示测试通过。
默认情况下,dotnet-watch
跟踪与以下 glob 模式匹配的所有文件:
*/.cs
*.csproj
*/.resx
通过编辑 .csproj 文件,可向监视列表添加更多项 。可以单独指定项或使用 glob 模式指定。
从要监视的文件中排除Opt-out of files to be watched
dotnet-watch
可配置为忽略其默认设置。要忽略特定文件,请在 .csproj 文件中向某项的定义中添加 Watch="false"
特性 :
<ItemGroup>
<Compile Include="Generated.cs" Watch="false" />
<EmbeddedResource Include="Strings.resx" Watch="false" />
<!-- exclude changes in this referenced project -->
<ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>
dotnet-watch
不仅限于 C# 项目。可以创建自定义监视项目来处理不同的方案。假设项目布局如下:
- test/
- UnitTests/UnitTests.csproj
- IntegrationTests/IntegrationTests.csproj
如果目标是监视这两个项目,请创建配置为监视这两个项目的自定义项目文件:
<Project>
<ItemGroup>
<TestProjects Include="**\*.csproj" />
<Watch Include="**\*.cs" />
</ItemGroup>
<Target Name="Test">
<MSBuild Targets="VSTest" Projects="@(TestProjects)" />
</Target>
</Project>
要对这两个项目启动文件监视,请更改为 test 文件夹 。请执行以下命令:
GitHub 中的 dotnet-watchdotnet-watch in GitHub
是 GitHub dotnet/AspNetCore 存储库的一部分。