这是 ASP.NET Core 系列新文章的第八篇。在本文中,我们将学习在开发和调试过程中如何使用 .NET CLI 文件监视工具。

1.运行时调试

假设我们有一个 Sum() 方法,如下所示:

[Route("[action]")]
public ActionResult<string> Sum(
		[FromQuery(Name = "num1")] int num1,
		[FromQuery(Name = "num2")] int num2)
{
		var sum = (num1 + num2).ToString();
		return $"{num1} + {num2} = {sum}.";
}

我们可以使用 dotnet run 从命令行运行Web应用程序:

> dotnet run

然后我们通过Web浏览器访问 https://localhost:5001/api/calc/sum?num1=1&num2=1 可得到如下结果: file

但是,如果尝试传递带小数点的数字(例如,num1和num2分别为3和4.4),则会出现错误,如下图: file

要解决该错误,我们可以更改输入参数类型以使用双精度而不是整数,然后保存。

[Route("[action]")]
public ActionResult<string> Sum(
		[FromQuery(Name = "num1")] double num1,
		[FromQuery(Name = "num2")] double num2)
{
		var sum = (num1 + num2).ToString();
		return $"{num1} + {num2} = {sum}.";
}

这时如果我们尝试刷新浏览器,仍然会得到相同的旧错误消息。我们必须重新启动应用程序才能看到新的更改。那么有没有办法可以让我们不重启应用,依旧可以使修改后的代码生效呢?有的,而且还很简单!

2.监视文件更改

还原刚才的修改,然后再次运行该应用程序。但是这一次,我们使用以下CLI命令使用ASP.NET Core文件监视程序。

> dotnet  watch run

这将启动应用程序,同时监视文件的变更。 file

这时候如果我们访问https://localhost:5001/api/calc/sum?num1=3&num2=4.4依旧会提示错误,然后继续上面的修改使用双精度类型参数,保存!!!,见证奇迹的时刻到了^^ file

3.测试,定制以及退出

那么它还能做什么呢?

  • 自动化测试:检测到文件更改时,运行dotnet watch test来重新运行测试。
  • 自定义要监视的文件列表:更新.csproj项目文件,以使用通配符模式(以分号分隔)来包含或排除文件。也可以通过在.csproj文件中提及特定文件来选择退出这些文件。

官方文档中所述,这是语法示例:

  • 具有 Include 或 Exclude 属性的 Watch 元素
  • Watch 属性设置为 false 的其他元素(未设置时默认为true)
<ItemGroup>
 <!-- extends watching group to include *.ext1 files, exclude subfolders/files -->
 <Watch Include="**\*.ext1" Exclude="subfolder1\**\*;**\*.ext1.ext2;obj\**\*;subfolder2\**\*" />

 <!-- exclude class file Class1.cs from dotnet-watch -->
 <Compile Include="Class1.cs" Watch="false" />
 <!-- exclude embedded resource ResourceFile.resx from dotnet-watch -->
 <EmbeddedResource Include="ResourceFile.resx" Watch="false" />
 <!-- exclude changes in this referenced project -->
 <ProjectReference Include="..\ClassLibrary1\ClassLibrary1.csproj" Watch="false" />
</ItemGroup>