Razor 在dotnet core 3.0上未自动检测到对*.cshtml文件的更改

Razor 在dotnet core 3.0上未自动检测到对*.cshtml文件的更改,razor,asp.net-core,Razor,Asp.net Core,重现问题的步骤: 下载并安装dotnet core 3.0 创建新项目:dotnet新webapp-n MyApp 运行应用程序dotnet Run 导航到 编辑隐私页面MyApp\Pages\Privacy.cshtml 刷新 工具箱不会拾取更改,并呈现旧页面 dotnet core 2.2(新安装)的相同流程会导致页面更新。 是否有一个标志,需要在配置中的某个位置设置该标志才能使autodetect在3.0中工作,或者这是一个bug?我不完全确定这是同一个问题,但ASP.NET Core 2

重现问题的步骤:

下载并安装dotnet core 3.0

  • 创建新项目:
    dotnet新webapp-n MyApp
  • 运行应用程序
    dotnet Run
  • 导航到
  • 编辑隐私页面
    MyApp\Pages\Privacy.cshtml
  • 刷新
  • 工具箱不会拾取更改,并呈现旧页面
  • dotnet core 2.2(新安装)的相同流程会导致页面更新。
    是否有一个标志,需要在配置中的某个位置设置该标志才能使autodetect在3.0中工作,或者这是一个bug?

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

    更新


    值得一提的是,我已经看到这种行为实际上有点随机。对我来说,一些更改似乎像以前一样启动了自动生成,而其他更改则不会显示,除非我手动生成。似乎也没有太多的押韵或理由要求做出改变。有可能这方面的工具还不完善,未来对VisualStudio的更新可能会使进程内模型的行为与开发中的代码更改过程中的进程外模型的行为一致。我所知道的是,切换到进程外肯定会解决所有问题,因此它在某种程度上与进程内模型相关。

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

    内部
    ConfigureServices
    方法
    Startup.cs

    对于ASP.NET核心MVC:

    IMvcBuilder mvc = services.AddControllersWithViews();
    mvc.AddRazorRuntimeCompilation();
    
    对于ASP.NET核心剃须刀页面:

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


    来源:

    谢谢你的回复。在csproj文件中设置
    OutOfProcess
    ,无法解决该问题。