我很难使用 Visual Studio 2022 17.8.8、.NET 8.0.103 (Windows 11) 在 IIS v10.0 下启用 Razor 页面的运行时编译。
我已按照 https://learn.microsoft.com/en-us/aspnet/core/mvc/views/view-compilation?view=aspnetcore-8.0&tabs=visual-studio 的说明进行操作,并添加了所需的 nuget包
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation
(v8.03)。按照说明配置服务,但我不将运行时编译仅限于开发环境。我希望它在已发布的站点中处于活动状态(是的,我知道我在做什么,我意识到潜在的性能问题等)
将站点发布到本地 IIS 上的目录后,它本身可以工作,但运行时编译则不能工作。发布时没有复制任何 .cshtml
页面,因此无需进行任何修改。
好的,所以我尝试将解决方案资源管理器中的“复制到输出目录”设置更改为“始终复制”。然后,它们在发布时被复制,但是惰性的 - 更改其内容对浏览器中的应用程序没有影响。显然,这些页面在发布时仍然被编译成静态程序集。我查看了以前的一些答案,例如:
Razor Page Runtime Compilation not work
(有关RazorCompileOnPublish
设置的接受解决方案不起作用)和这个
.NET 6 MVC 启用 razor 运行时编译会破坏program.cs
(不同的、不相关的问题),他们的建议对我没有帮助。我还征询了克劳德(AI)的意见,它提出了一些建议,但都不起作用。我需要一些人类智慧来帮助我。 我应该提到的是,我想我记得以前用过以前版本的 .NET Core 和 VS 做过这件事,而且我不记得这有多痛苦。这应该很简单:与 MVC 不同,Razor 页面大概是动态的且易于设置。
<rant>
</rant>
Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation (v8.03)
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="8.0.3" />
</ItemGroup>
<ItemGroup>
<PageFiles Include="$(ProjectDir)\Pages\**\*.cshtml" />
</ItemGroup>
<!-- Copy .cshtml files from Pages folder after publishing -->
<Target Name="CopyPageFilesAfterPublish" AfterTargets="Publish">
<Copy SourceFiles="@(PageFiles)"
DestinationFolder="$(PublishDir)\Pages\%(RecursiveDir)"
/>
</Target>
</Project>
2.添加服务builder.Services.AddRazorPages().AddRazorRuntimeCompilation();
3.测试已复制文件