.NET Core 3.0: Razor 视图不会在更改时自动重新编译

根据 文件,Razor 视图默认情况下应该在 ASP.NET Core 3.0的本地环境变化时重新编译。

但是,我的项目不在本地执行此操作。如果在本地调试时更改视图并刷新,则不会反映更改。我必须停止解决方案,重新运行,然后看到更改。

我在 Visual Studio 2019上使用 ASP.NET Core 3.0.0 Preview 2(使用 Razor 页面)的默认 ASP.NET Core Web Application 模板进行这项工作。是否需要更改设置以启用此功能?

49498 次浏览

OK it looks like it's not supported yet :(

运行时编译被删除,因为清除了 NET 核心共享框架不依赖罗斯林,支持 runtime compilation of pages and views has also been removed in this 而是编译页面和视图 在未来的预览更新中,我们将提供一个 NuGet 包中启用运行时编译支持 应用程序。

你可以在这里阅读更多有关问题 https://github.com/aspnet/Announcements/issues/343

需要运行时编译或重新编译 Razor 文件的应用程序应该:

  • 添加对 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包的引用。它将作为 3.0.0-preview3版本的一部分提供。
  • Update the application's ConfigureServices to include a call to AddMvcRazorRuntimeCompilation:

ASP.NET Core3中获得运行时视图编译

  1. 参考资料 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. 打电话给 services.AddMvc().AddRazorRuntimeCompilation()
  3. 如果在 Microsoft.CodeAnalysis.Common包上存在版本不匹配,请删除 Microsoft.VisualStudio.Web.CodeGeneration.Design

对于 ASP.NET Core 3发行版:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

Https://learn.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0

它也可以有条件地只为地方发展启用,从链接引述:

Runtime compilation can be enabled such that it's only available for 以这种方式有条件地启用可确保 the published output:

使用已编译的视图。
尺寸较小。
Doesn't enable file watchers 在制作中。

   public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
Configuration = configuration;
Env = env;
}


public IWebHostEnvironment Env { get; set; }
public IConfiguration Configuration { get; }


public void ConfigureServices(IServiceCollection services)
{
IMvcBuilder builder = services.AddRazorPages();


#if DEBUG
if (Env.IsDevelopment())
{
builder.AddRazorRuntimeCompilation();
}
#endif
}

使用 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包启用运行时编译。要启用运行时编译,应用程序必须:

  1. 安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包裹

  2. Update the project's Startup.ConfigureServices method to include a 呼叫 AddRazorRuntimeCompilation:

services
.AddControllersWithViews()
.AddRazorRuntimeCompilation();

Https://learn.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.0

要在 ASP.NET Core 3.1中获得运行时 Razor 视图编译:

  1. 安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。
  2. 更新项目的 Startup.ConfigureServices方法以包括对 AddRazorRuntimeCompilation的调用。
  3. services.AddRazorPages().AddRazorRuntimeCompilation();

    NET Core 3.1中的 Razor 文件编译

附加说明一下——您可能只希望有条件地启用此运行时编译,以便发布的输出:

  • 使用已编译的视图。
  • 尺寸较小。
  • 无法在生产环境中启用文件监视器。

有条件地启用运行时编译

步骤1: 从 NuGet Package Manager for Solution 安装以下软件包。

微软。 AspNetCore。 Mvc.Razor。运行时编译

Step 2: Add the below code in ConfigureServices of Startup.cs file

AddControllersWithviews ()

保存页面,然后刷新客户端浏览器。

如果您正在使用 Razor,那么添加服务的代码

In .NET Core 3.1, you need disable generation of the views.dll file.

  1. 将下面的代码添加到 .csproj文件(在项目的根目录中) :

    <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <UserSecretsId>...</UserSecretsId>
    
    
    <!-- add from this line: -->
    <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
    <CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory>
    <MvcRazorCompileOnPublish>false</MvcRazorCompileOnPublish>
    <RazorCompileOnBuild>false</RazorCompileOnBuild>
    <!-- to this line. -->
    
    
    </PropertyGroup>
    
  2. 从解决方案的 NuGet 包管理器安装以下包。

    Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
    
  3. 将以下代码添加到 Startup.cs文件的 ConfigureServices方法中:

    services.AddMvc().AddRazorRuntimeCompilation();
    

    或者

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    或者

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

在这之后,再次发布并运行它。它将工作。

配置仅用于本地开发的运行时编译的最简单方法是更新 launchSettings.json中的启动配置文件。此方法不需要更改代码来配置在本地运行的项目(它不会影响生产)。

官方文件:

  1. 安装 微软。 AspNetCore。 Mvc.Razor。运行时编译 NuGet 包。
  2. 修改 launchSettings.json 中的启动配置文件 Environmental Variables 部分:
    • 验证 ASPNETCORE_ENVIRONMENT设置为“开发”。
    • Set ASPNETCORE_HOSTINGSTARTUPASSEMBLIES to "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation".

例如:

{
"iisSettings": {
"windowsAuthentication": false,
"anonymousAuthentication": true,
"iisExpress": {
"applicationUrl": "http://localhost:57676",
"sslPort": 44364
}
},
"profiles": {
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
}
},
"RazorPagesApp": {
"commandName": "Project",
"launchBrowser": true,
"applicationUrl": "https://localhost:5001;http://localhost:5000",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"ASPNETCORE_HOSTINGSTARTUPASSEMBLIES": "Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation"
}
}
}
}