剃刀页面运行时编译不起作用

时间:2020-07-17 10:23:05

标签: c# asp.net-core razor asp.net-core-3.1

我试图在Razor页面的MVC Core 3.1 Web应用程序中运行Razor运行时编译,但对我而言不起作用。令人沮丧的是,我以前在多个版本(2.0、2.1、3.1)中都有使用控制器和视图的MVC Core Web应用程序,它们按预期工作。

什么不起作用?

发布项目时,我希望在包含我的.cshtml文件的发布输出中看到一个/ pages文件夹。没有一个,而且发布文件夹中的任何地方都没有.cshtml文件。

什么工作?

该网站运行正常,可以按预期提供页面,因此这些页面可以正确地编译到WebApplication3.1.Views.dll程序集中。这里没有问题。

我尝试了什么?

为了进行复制,我按照https://docs.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-3.1&tabs=visual-studio中的说明创建了一个新的MVC项目,该项目在创建时启用了Razor运行时编译。我可以确认在发布的输出中存在Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation.dll程序集,并且从services.AddRazorPages().AddRazorRuntimeCompilation()方法中调用了Startup.ConfigureServices。查看了文档以及几个StackExchange答案之后,这足以启用运行时编译。 .csproj文件如下所示:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <TargetFramework>netcoreapp3.1</TargetFramework>
    <RootNamespace>WebApplication3._1</RootNamespace>
    <CopyRefAssembliesToPublishDirectory>false</CopyRefAssembliesToPublishDirectory>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="3.1.4" />
  </ItemGroup>
</Project>

然后,我向.csproj文件中添加了<Target>元素,以使页面进入publish文件夹,该页面可以正常工作,但是当我部署和更改.cshtml文件时,我得到了一个例外,即{{1 }}找不到。因此,我可以看到运行时编译工作正常,但已失败。

在这一点上,考虑到在我的其他基于MVC Core 3.1控制器/视图的项目中,它确实起作用了。我似乎缺少了一些明显的东西吗?< / p>

我也查看了其他StackExchange问​​题,尤其是这个问题,但它说的基本上是同一件事:

.NET Core 3.0: Razor views don't automatically recompile on change

我正在使用Visual Studio 2019专业版16.6.4

1 个答案:

答案 0 :(得分:2)

您似乎需要RazorCompileOnPublish属性,可以在.csproj文件中设置该属性:

<Project Sdk="Microsoft.NET.Sdk.Web">
  <PropertyGroup>
    <RazorCompileOnPublish>false</RazorCompileOnPublish>
    ...
  </PropertyGroup>

  ...
</Project>

只需将RazorCompileOnPublish设置为false,但我怀疑您不需要.csproj中的CopyRefAssembliesToPublishDirectory属性。