You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

.NET 5环境下ASP.NET项目Views文件夹无法复制至构建目录及Razor运行时编译异常求助

解决.NET5项目Views文件夹发布及运行时编辑视图的异常问题

针对你在.NET5项目里遇到的「Views文件夹无法复制到构建/发布目录、启用运行时编译后修改视图触发Antiforgery引用异常」的问题,结合你的核心需求——无需重新编译即可编辑Razor视图,我整理了一套可行的解决方案:

一、确保Views文件夹被完整复制到发布目录

之前的配置缺少关键项,你需要更新csproj文件,添加以下完整配置:

<PropertyGroup>
  <TargetFramework>net5.0</TargetFramework>
  <PreserveCompilationContext>true</PreserveCompilationContext>
  <!-- 关闭编译阶段的Razor编译,保留原始cshtml文件 -->
  <RazorCompileOnBuild>false</RazorCompileOnBuild>
  <!-- 关闭发布阶段的Razor编译,避免cshtml被编译成dll -->
  <RazorCompileOnPublish>false</RazorCompileOnPublish>
  <!-- 复制Razor生成文件到发布目录 -->
  <CopyRazorGenerateFilesToPublishDirectory>true</CopyRazorGenerateFilesToPublishDirectory>
  <!-- 以"保留最新版本"的策略复制原始Razor文件到发布目录 -->
  <CopyRazorFilesToPublishDirectory>PreserveNewest</CopyRazorFilesToPublishDirectory>
</PropertyGroup>

重点是加上<RazorCompileOnPublish>false</RazorCompileOnPublish>和<CopyRazorFilesToPublishDirectory>PreserveNewest</CopyRazorFilesToPublishDirectory>,前者确保发布时不会把cshtml编译成程序集,后者保证原始视图文件被复制到目标目录。

二、修复运行时编辑视图的Antiforgery引用异常

添加Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation包后出现的Cannot find reference assembly 'Microsoft.AspNetCore.Antiforgery.dll'异常,是因为运行时编译需要完整的ASP.NET Core引用支持,你可以二选一解决:

方案1:添加ASP.NET Core元包引用

在csproj的<ItemGroup>节点中加入以下内容,这个元包会自动包含所有ASP.NET Core运行时核心组件,包括Antiforgery相关程序集:

<ItemGroup>
  <FrameworkReference Include="Microsoft.AspNetCore.App" />
</ItemGroup>

方案2:显式添加Antiforgery包引用

如果元包引用不适合你的项目,可以直接添加对应版本的Antiforgery包,注意版本要和你的.NET5补丁版本一致(比如5.0.17是.NET5的最终补丁版本):

<ItemGroup>
  <PackageReference Include="Microsoft.AspNetCore.Antiforgery" Version="5.0.17" />
</ItemGroup>

三、确认运行时编译配置正确

在ConfigureServices中确保正确启用Razor运行时编译,建议只在开发环境启用(生产环境如果需要热更新也可以保留):

public void ConfigureServices(IServiceCollection services)
{
    services.AddHttpContextAccessor();
    services.AddAuthentication(IdentityConstants.ApplicationScheme)
        .AddCookie(IdentityConstants.ApplicationScheme, o =>
        {
            o.Cookie.Path = "/";
        });

    var mvcBuilder = services.AddControllersWithViews(o => 
        o.Filters.Add(new AuthorizeFilter())
    );

    // 仅在调试环境启用运行时编译,生产环境可根据需求调整
#if DEBUG
    mvcBuilder.AddRazorRuntimeCompilation();
#endif
}

最后验证步骤

  1. 先清理项目:右键项目 -> 清理
  2. 重新生成并发布项目,检查发布目录下是否存在Views文件夹及对应的.cshtml文件
  3. 运行发布后的应用,修改任意cshtml文件后刷新页面,确认视图生效且无Antiforgery异常

这样配置后,既满足了Views文件夹复制到目标目录的需求,也能实现无需重新编译即可编辑视图的效果,同时解决了引用缺失的问题。

内容的提问来源于stack exchange,提问作者Antonio Rodríguez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.29 22:44:09