我试图在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
答案 0 :(得分:2)
您似乎需要RazorCompileOnPublish
属性,可以在.csproj文件中设置该属性:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<RazorCompileOnPublish>false</RazorCompileOnPublish>
...
</PropertyGroup>
...
</Project>
只需将RazorCompileOnPublish
设置为false
,但我怀疑您不需要.csproj中的CopyRefAssembliesToPublishDirectory
属性。