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

.NET6 ASP.NET站点添加AddRazorRuntimeCompilation后无法显示页面求助

解决.NET6 ASP.NET站点Razor运行时编译失败(含非托管DLL元数据错误)的思路
  • 检查RuntimeCompilation包版本与.NET6 SDK匹配
    更新NuGet包时可能误将Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation升级到了7.x/8.x版本,这与.NET6不兼容。需在项目文件中强制指定该包为6.x系列稳定版,例如:

    <PackageReference Include="Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation" Version="6.0.25" />
    
  • 排除非托管DLL被Razor编译扫描
    编译过程误将krbcc64.dll、krb5_64.dll这类非托管PE文件纳入扫描范围,导致元数据读取失败。可在.csproj中添加配置排除它们:

    <ItemGroup>
      <Content Include="krbcc64.dll;krb5_64.dll">
        <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
        <ExcludeFromCompilation>true</ExcludeFromCompilation>
      </Content>
    </ItemGroup>
    

    若这些DLL来自第三方NuGet包,也可通过包引用配置排除运行时资产:

    <PackageReference Include="对应包名" Version="x.x.x">
      <ExcludeAssets>runtime</ExcludeAssets>
    </PackageReference>
    
  • 清理项目与NuGet缓存
    旧缓存可能导致版本冲突,执行以下操作:

    1. 删除项目根目录下的bin和obj文件夹
    2. 运行命令清理NuGet缓存:dotnet nuget locals all --clear
    3. 重新构建项目
  • 锁定.NET6 SDK版本
    确保global.json文件指定了正确的.NET6 SDK版本,避免自动使用更高版本SDK引发兼容问题:

    {
      "sdk": {
        "version": "6.0.417",
        "rollForward": "latestMinor"
      }
    }
    
  • 启用详细编译日志排查
    若以上方法无效,可在配置RuntimeCompilation时添加日志输出,定位具体编译错误来源:

    builder.Services.AddRazorPages()
        .AddRazorRuntimeCompilation(options =>
        {
            options.CompilationCallback = context =>
            {
                // 输出所有编译引用,排查是否包含非托管DLL
                foreach (var reference in context.References)
                {
                    Console.WriteLine($"编译引用: {reference.Display}");
                }
            };
        });
    

内容的提问来源于stack exchange,提问作者Benjamin DUFOYER

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 22:55:56