dotnet core 3.0 上不会自动检测对 *.cshtml 文件的更改

ger*_*ras 5 razor asp.net-core

重现问题的步骤:

下载并安装 dotnet core 3.0

  1. 创建一个新项目:dotnet new webapp -n MyApp
  2. 运行应用程序dotnet run
  3. 导航到http://localhost:5000/Privacy
  4. 编辑隐私页面MyApp\Pages\Privacy.cshtml
  5. 刷新
  6. 工具包不会接受这些更改,并且会呈现旧页面。

dotnet core 2.2(新安装)的相同流程会产生更新的页面。是否有一个标志需要在配置中的某个位置设置才能使自动检测在 3.0 上工作,或者这是一个错误?

Ash*_*ada 6

dotnet对您的项目使用CLI 命令watch run

dotnet watch run
Run Code Online (Sandbox Code Playgroud)

或者,您可以在不启用热重载的情况下观看运行:

dotnet watch run --no-hot-reload
Run Code Online (Sandbox Code Playgroud)

将此指令添加到项目文件中[ProjectName].csproj

<ItemGroup>
        <!-- extends watching group to include *.cshtml and *.razor files -->
        <Watch Include="**\*.cshtml;*.razor;*.js;*.css" Exclude="**\obj\**\*;bin\**\*" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

有关详细信息,请参阅Microsoft DotNet 5.0 文档


Chr*_*att 0

我不完全确定这是同一个问题,但 ASP.NET Core 2.2 引入了进程内 IIS 托管模型。这在生产环境中提供了很多性能优势,但基本上否定了 ASP.NET Core 最有用的开发功能之一:自动更新。如果您在开发中使用 In Process 模型,则需要在代码更改后进行构建,就像旧的 ASP.NET MVC 站点一样。您可以通过转到项目属性或编辑 csproj.xml 将托管模型切换回进程外模型(旧方式)。在属性中,“调试”选项卡上现在有一个下拉列表,它对应于<AspNetCoreHostingModel>csproj 中的标记。

更新

就其价值而言,我实际上发现这种行为实际上有些随机。对我来说,一些更改似乎像以前一样启动了自动构建,而除非我手动构建,否则其他更改不会显示。似乎没有太多的韵律或理由来改变所需要的东西。用于此目的的工具可能尚未完善,并且 Visual Studio 的未来更新可能会使进程内模型的行为与进程外模型在开发中代码更改时的行为一致。我所知道的是,切换到进程外肯定可以解决与此相关的所有问题,因此它在某种程度上与进程内模型相关。