dotnet core 3.0 上,*.cshtml 文件的更改无法自动检测

5

重现问题的步骤:

下载并安装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的自动检测正常工作,或者这是一个错误?

3个回答

5

使用 dotnet 命令行工具来实时运行你的项目:

dotnet watch run

可选择禁用热重载(hot reload)功能运行应用程序:

dotnet watch run --no-hot-reload

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

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

更多信息请参见Microsoft DotNet 5.0文档


这也适用于 .Net 6。 - Kjensen
有效:与Dotnet5兼容。 - FlyingV

3

在搜索问题根本原因时,我遇到了这个SO问题。要解决这个问题,您需要向项目中添加Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet包,并像下面这样修改Startup.cs

Startup.csConfigureServices方法内

对于ASP.NET Core MVC:

IMvcBuilder mvc = services.AddControllersWithViews();
mvc.AddRazorRuntimeCompilation();

对于ASP.NET Core Razor Pages:

IMvcBuilder mvc = services.AddRazorPages();
mvc.AddRazorRuntimeCompilation();

PS: 切勿忘记仅在开发环境中使用此功能'dotnet-watch',因为对于大多数情况下的生产环境没有意义。

来源:https://learn.microsoft.com/en-us/aspnet/core/migration/22-to-30?view=aspnetcore-3.0&tabs=visual-studio


2021 年更新(更好的解决方案):您不需要在Startup.cs中执行AddRazorRuntimeCompilation方法。您可以通过将值添加到项目的调试配置来保持此功能运行。

请在项目属性 > 调试 > 环境变量中添加新的环境变量。

名称:ASPNETCORE_HOSTINGSTARTUPASSEMBLIES

值:Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation


0

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

更新

就我所知,实际上我发现这种行为有点随机。对于我来说,有些更改似乎会像以前一样触发自动构建,而其他更改除非我手动构建,否则不会显示出来。也没有什么明显的规律可以解释哪些更改需要什么。可能这方面的工具还不够完善,未来 Visual Studio 的更新可能会使 In Process 模型在开发中的代码更改方面表现得与 Out of Process 模型一致。我只知道切换到 Out of Process 肯定可以解决所有这些问题,因此它与 In Process 模型有某种关联。


感谢您的回复。在csproj文件中设置<AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>并没有解决这个问题。 - gerasoras

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接