Rob*_*obA 7 c# razor asp.net-core asp.net-core-3.1
我试图让 Razor 运行时编译在 Razor 页面的 MVC Core 3.1 Web 应用程序中工作,但它对我不起作用。令人沮丧的是,因为我在多个版本(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 中的说明创建了一个新的 MVC 项目,并在创建时启用了 Razor 运行时编译-3.1&tabs=visual-studio。我可以确认该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>
Run Code Online (Sandbox Code Playgroud)
然后我将<Target>元素添加到 .csproj 文件中以将页面放入发布文件夹中,该文件夹有效,但是当我部署和更改 .cshtml 文件时,我遇到了Microsoft.AspNetCore.Antiforgery.dll无法找到的异常。所以我可以看到运行时编译是有效的,但被破坏了。
在这一点上,这似乎比它应该的更复杂,考虑到在我的其他基于 MVC Core 3.1 控制器/视图的项目中它刚刚工作。我错过了一些非常明显的东西吗?
我还查看了其他 StackExchange 问题,特别是这个问题,但它基本上说的是同一件事:
.NET Core 3.0:Razor 视图不会在更改时自动重新编译
我使用的是 Visual Studio 2019 专业版 16.6.4
看起来您需要该RazorCompileOnPublish属性,您可以在 .csproj 文件中设置该属性:
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<RazorCompileOnPublish>false</RazorCompileOnPublish>
...
</PropertyGroup>
...
</Project>
Run Code Online (Sandbox Code Playgroud)
设置RazorCompileOnPublish为false应该是所需要的,但我怀疑您不需要CopyRefAssembliesToPublishDirectory在 .csproj 中使用该属性。
| 归档时间: |
|
| 查看次数: |
1357 次 |
| 最近记录: |