116

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

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

我在 Visual Studio 2019 上的默认 ASP.NET Core Web 应用程序模板上使用 Razor 页面使用 ASP.NET Core 3.0.0 Preview 2 执行此操作。知道我是否需要更改设置以启用此功能?

2019 年 11 月更新 3.0 完整版本:

这个问题仍然有很多观点。引用了一些答案来补充

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

添加NuGet 包后到您的ConfigureServices()函数中。就我而言,我只使用 Razor Pages,所以我不调用. 相反,这对我有用:Startup.csMicrosoft.AspNetCore.Mvc.Razor.RuntimeCompilationAddControllersWithViews()

services.AddRazorPages().AddRazorRuntimeCompilation();
4

9 回答 9

71

对于 ASP.NET Core 3 发行版:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

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

它也可以仅针对本地开发有条件地启用,引用自链接:

可以启用运行时编译,使其仅可用于本地开发。以这种方式有条件地启用可确保发布的输出:

使用编译视图。
体积更小。
不在生产环境中启用文件观察器。

   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
    }
于 2019-09-29T18:11:07.327 回答
66

好的,它看起来还不支持:(

删除了运行时编译由于清理了 ASP.NET Core 共享框架以不依赖于 Roslyn,因此在此预览版本中也删除了对页面和视图的运行时编译的支持。相反,页面和视图的编译是在构建时执行的。在未来的预览更新中,我们将提供一个 NuGet 包,用于选择性地在应用中启用运行时编译支持。

您可以在此处阅读有关此问题的更多信息https://github.com/aspnet/Announcements/issues/343

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

  • 添加对Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包的引用。它将作为3.0.0-preview3版本的一部分提供。
  • 更新应用程序ConfigureServices以包含对以下内容的调用AddMvcRazorRuntimeCompilation
于 2019-02-25T23:51:55.267 回答
42

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

  1. 参考Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. 称呼services.AddMvc().AddRazorRuntimeCompilation()
  3. Microsoft.VisualStudio.Web.CodeGeneration.Design如果Microsoft.CodeAnalysis.Common包上的版本不匹配,请删除
于 2019-05-04T10:30:24.307 回答
26

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

  1. 安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet 包。

  2. 更新项目的Startup.ConfigureServices方法以包括调用AddRazorRuntimeCompilation

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

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

于 2019-10-03T20:54:47.547 回答
19

要在 ASP.NET Core 3.1 中恢复运行时 Razor 视图编译,请执行以下操作:

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

    ASP.NET Core 3.1 中的 Razor 文件编译

于 2020-01-13T10:57:40.530 回答
15

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

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

第 2 步:在 Startup.cs 文件的 ConfigureServices 中添加以下代码

services.AddControllersWithViews().AddRazorRuntimeCompilation();

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

如果您使用的是 Razor,请添加 services.AddRazorPages().AddRazorRuntimeCompilation(); 的代码

于 2020-03-28T08:40:53.977 回答
8

在 .NET Core 3.1 中,您需要禁用views.dll文件的生成。

  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. 将以下代码添加到文件的ConfigureServices方法中Startup.cs

    services.AddMvc().AddRazorRuntimeCompilation();
    

    或者

    services.AddControllersWithViews().AddRazorRuntimeCompilation();
    

    或者

    services.AddRazorPages().AddRazorRuntimeCompilation();
    

在此之后,再次发布并运行它。它会起作用的。

于 2020-06-28T11:52:36.960 回答
6

只是一个补充说明 - 您可能只想有条件地启用此运行时编译,以便发布的输出:

  • 使用编译视图。
  • 体积更小。
  • 不在生产环境中启用文件观察器。

有条件地启用运行时编译

于 2020-01-15T16:25:07.977 回答
5

为本地开发配置运行时编译的最简单方法是在launchSettings.json. 此方法无需更改代码即可配置在本地运行的项目(不会影响您的生产)。

官方文档

  1. 安装Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。
  2. 修改 launchSettings.json 中的启动配置文件 environmentVariables 部分:
    • 验证ASPNETCORE_ENVIRONMENT设置为“开发”。
    • 设置ASPNETCORE_HOSTINGSTARTUPASSEMBLIES为“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"
      }
    }
  }
}
于 2020-10-03T23:29:11.303 回答