ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

.cshtml 剃刀视图确实会重新编译。你能仔细检查一下吗?尝试添加

Test

。启动应用程序,加载页面。你应该看到“测试”。然后将其更改为

Foo

。你应该看到“Foo”。
不工作!我必须停止并启动解决方案。在此处捕获:drive.google.com/file/d/1xOWQK2SvE2dskSYRdLz9X7iEmAv7BcTN/… - 已在多台机器上尝试使用库存的 Razor Pages 模板。
你是在mac还是pc还是linux上运行?此外,这可能是预览的问题。您可以尝试使用 asp.net core 2.x 吗?
PC、Visual Studio 2019 预览版。我尝试了 2.2 并且它有效!所以在 3.0 中发生了一些变化。
我在完全更新的 .net core 3/VS 上,必须添加 .AddRazorRuntimeCompilation(); 谢谢!

R
Rauland

对于 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
    }

关于 .Net 核心版本相关的 nuget 包版本的提示。如果您使用 .Net Core 3.0,则无法选择此 Nuget 包的更高版本。但是 Nuget 库的 3.0.0 版适用于 .Net Core 3.0。如果您使用 .Net Core 3.1,则可以选择较新的版本。
L
Lukáš Kmoch

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

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

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

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

添加对 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 包的引用。它将作为 3.0.0-preview3 版本的一部分提供。

更新应用程序的 ConfigureServices 以包含对 AddMvcRazorRuntimeCompilation 的调用:


AddMvcRazorRuntimeCompilationAddRazorRuntimeCompilation 与 ASP.Net Core 3.0 Preview 4
我正在使用 .NET Core 6,它适用于所有项目。
D
Dmitry Pavlov

ASP.NET Core 3 中重新获取运行时视图编译

参考 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 调用 services.AddMvc().AddRazorRuntimeCompilation() 如果 Microsoft.CodeAnalysis.Common 包上存在版本不匹配,请移除 Microsoft.VisualStudio.Web.CodeGeneration.Design


对其他人的提示:使用 Nuget 时,勾选/选中“预发布”框。
有没有办法防止资产被部署到生产环境中?我在 PackageReference 上尝试了一些 PrivateAssets 的组合,但它似乎不起作用。
在 Core 2.2 中,剃须刀选项具有 FileProviders,即使没有任何重新编译也可以工作。只需编辑cshtml,瞧。在核心 3 中,此属性已被删除。 :( github.com/aspnet/AspNetCore/issues/14572
+1 因为删除 Microsoft.VisualStudio.Web.CodeGeneration.Design 包是其他地方没有提到的秘诀。
@tkburbidge 我刚刚也遇到了这个问题。奇怪的是,我有两条完全一样的线,背靠背。我删除了两者,并且可以编译。更奇怪的是,然后我将这些行放回原处,并且仍然能够编译。
k
kevic

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

安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。更新项目的 Startup.ConfigureServices 方法以包含对 AddRazorRuntimeCompilation 的调用:

services
    .AddControllersWithViews()
    .AddRazorRuntimeCompilation();

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


N
Naman Upadhyay

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

安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。更新项目的 Startup.ConfigureServices 方法以包含对 AddRazorRuntimeCompilation 的调用。 services.AddRazorPages().AddRazorRuntimeCompilation(); ASP.NET Core 3.1 中的 Razor 文件编译


N
Nathan

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

Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation

https://i.stack.imgur.com/tDOmv.jpg

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

services.AddControllersWithViews().AddRazorRuntimeCompilation();

https://i.stack.imgur.com/qmjv3.jpg

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

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


J
Jeremy Caney

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

将以下代码添加到您的 .csproj 文件(在项目的根目录中): netcoreapp3.1 ... true false false false 从解决方案的 NuGet 包管理器安装以下包。 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation 将以下代码添加到 Startup.cs 文件的 ConfigureServices 方法中: services.AddMvc().AddRazorRuntimeCompilation();或 services.AddControllersWithViews().AddRazorRuntimeCompilation();或 services.AddRazorPages().AddRazorRuntimeCompilation();

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


对于我的 .NET 5.0,在 .csproj <RazorCompileOnBuild>false</RazorCompileOnBuild> <RazorCompileOnPublish>false</RazorCompileOnPublish> <CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory> 中只需要以下标记所有其他 2 &还需要3个步骤
S
Siarhei Kavaleuski

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

请参阅the official documentation

安装 Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation NuGet 包。修改 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"
      }
    }
  }
}

B
BryanCass

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

使用编译视图。

体积更小。

不在生产环境中启用文件观察器。

Conditionally enable runtime compilation