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


100

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

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

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

更新2019年11月以进行3.0版全面发布:

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

services.AddControllersWithViews().AddRazorRuntimeCompilation(); 

为了您ConfigureServices()在功能Startup.cs加入后Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilationNuGet包。就我而言,我仅使用Razor Pages,因此不致电AddControllersWithViews()。相反,这对我有用:

services.AddRazorPages().AddRazorRuntimeCompilation();

.cshtml剃刀视图确实会重新编译。你可以仔细检查吗?尝试添加<h1> Test </ h1>。启动应用程序,加载页面。您应该看到“测试”。然后将其更改为<h1> Foo </ h1>。您应该看到“ Foo”。
约翰·路克·劳

不起作用!我必须停止并开始解决方案。在此处捕获它:drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/…-尝试在多台带有Razor Pages库存模板的计算机上使用。
tarun713

您是在Mac还是PC或Linux上运行?另外,预览可能会出现问题。您可以尝试使用asp.net core 2.x吗?
约翰-卢克·劳厄

PC,Visual Studio 2019预览版。我尝试了2.2,它可以工作!因此,在3.0中发生了一些变化。
tarun713

我使用的是完全更新的.net core 3 / VS,必须添加.AddRazorRuntimeCompilation();谢谢!
duckwizzle

Answers:


61

好的,看来它尚不支持:(

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

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

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

  • 添加对Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation程序包的引用。它将作为3.0.0-preview3版本的一部分提供。
  • 更新应用程序ConfigureServices以包括对的调用AddMvcRazorRuntimeCompilation

11
AddMvcRazorRuntimeCompilationAddRazorRuntimeCompilation与ASP.Net 3.0核心预览4
DB弗雷德

57

对于ASP.NET Core 3发行版本:

   services.AddControllersWithViews().AddRazorRuntimeCompilation();

https://docs.microsoft.com/zh-cn/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
    }

有关与.Net核心版本相关的nuget软件包版本的提示。如果使用.Net Core 3.0,则不能选择此Nuget程序包的更高版本。但是Nuget库的3.0.0版本可与.Net Core 3.0一起使用。如果使用.Net Core 3.1,则可以选择更新的版本。
Tore Aurstad

38

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

  1. 参考 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
  2. 呼叫 services.AddMvc().AddRazorRuntimeCompilation()
  3. Microsoft.VisualStudio.Web.CodeGeneration.Design如果Microsoft.CodeAnalysis.Common包装上的版本不匹配,请删除

2
其他提示:使用Nuget时,勾选/选中“预发布”框。
GeoffM

有没有办法防止资产部署到生产中?我在PackageReference上尝试了PrivateAssets的一些组合,但似乎不起作用。
Chet

在Core 2.2中,razor选项具有FileProviders,即使没有任何重新编译,它也可以工作。只需编辑cshtml和voila。在核心3中,此属性已删除。:( github.com/aspnet/AspNetCore/issues/14572
dariol

2
+1是因为删除Microsoft.VisualStudio.Web.CodeGeneration.Design程序包是其他任何地方都没有提到的秘密。
tkburbidge

@tkburbidge我也遇到了这个问题。奇怪的是,我背对背有两条完全一样的线。我都删除了,并且可以编译。更奇怪的是,我随后将这些行放回原处,并且仍然能够进行编译。
Lynn



12

步骤1:从NuGet解决方案软件包管理器中安装以下软件包。

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

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

services.AddControllersWithViews()。AddRazorRuntimeCompilation();

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

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


7

在.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();
    

此后,再次发布并运行它。会的。



2

仅针对本地开发配置运行时编译的最简单方法是更新中的启动配置文件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"
      }
    }
  }
}
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.