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

时间:2019-01-24 15:11:07

标签: 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(全新安装)的相同流程会导致页面更新。 是否有一个标记,需要在config中的某个位置设置该标记才能自动检测3.0版,这是一个错误吗?

3 个答案:

答案 0 :(得分:0)

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

更新

对于它的价值,我实际上已经看到这种行为实际上是随机的。对我来说,一些更改似乎像以前一样启动了自动构建,而其他更改除非我手动进行构建,否则不会显示。似乎并没有太多的押韵或原因,变更也需要什么。可能还没有那么完善的工具,将来对Visual Studio的更新可能使In Process模型的行为始终与Out of Process模型一致,因为开发过程中代码发生了变化。我所知道的是,切换到“进程外”无疑可以解决所有问题,因此它在某种程度上与“进程内”模型有关。

答案 1 :(得分:0)

在寻找该问题的根本原因时,我遇到了该SO问题。要解决该问题,您需要向项目中添加Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet程序包,并如下所示修改Startup.cs

ConfigureServices的{​​{1}}内部方法

对于ASP.NET Core MVC:

Startup.cs

对于ASP.NET Core Razor页面:

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

PS:不要忘记仅在开发环境中使用此功能IMvcBuilder mvc = services.AddRazorPages(); mvc.AddRazorRuntimeCompilation(); ,因为在大多数情况下,此功能对生产环境没有意义。

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

答案 2 :(得分:0)

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

dotnet watch run

将此指令添加到项目文件 [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 Documentation