.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缓存
旧缓存可能导致版本冲突,执行以下操作:- 删除项目根目录下的
bin和obj文件夹 - 运行命令清理NuGet缓存:
dotnet nuget locals all --clear - 重新构建项目
- 删除项目根目录下的
锁定.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
相关产品推荐
相关产品推荐

