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

ASP.NET Core 7 Razor运行时编译无法访问internal类,添加InternalsVisibleTo无效

解决ASP.NET Core 7 Razor运行时编译访问internal类的问题

你的问题出在ASP.NET Core 7对Razor运行时编译的程序集生成机制做了调整——原来的InternalsVisibleTo("Microsoft.AspNetCore.Mvc.Razor.RuntimeCompilation")不再生效,因为Razor编译时会生成独立的动态程序集,而非直接使用RuntimeCompilation的程序集来访问你的内部类型。以下是不用把internal改成public的解决办法:

方法1:允许所有视图动态程序集访问内部类型

Razor运行时编译生成的程序集通常以你的项目名.Views为前缀,所以可以直接添加通配符规则:

[assembly: InternalsVisibleTo("*.Views")]

如果是Debug环境下临时测试,也可以用更宽松的规则(不建议生产环境使用):

[assembly: InternalsVisibleTo("*")]

方法2:指定动态程序集名称并精准授权

在Program.cs中配置Razor运行时编译时,显式指定生成的程序集名称:

builder.Services.AddRazorPages()
    .AddRazorRuntimeCompilation(options =>
    {
        // 自定义动态程序集名称
        options.GeneratedAssemblyName = "MyApp.Views.Generated";
    });

然后在项目的AssemblyInfo.cs(或任意类的顶部)添加对应的授权:

[assembly: InternalsVisibleTo("MyApp.Views.Generated")]

方法3:确认Debug模式的编译配置正确性

检查你的MyApp.csproj,确保RuntimeCompilation仅在Debug环境启用(避免影响生产):

<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
    <EnableRazorRuntimeCompilation>true</EnableRazorRuntimeCompilation>
    <RazorCompileOnBuild>false</RazorCompileOnBuild>
    <RazorCompileOnPublish>false</RazorCompileOnPublish>
</PropertyGroup>

补充说明

ASP.NET Core 6及更早版本中,Razor运行时编译的程序集与主程序集的关联方式不同,所以旧的InternalsVisibleTo配置能生效,但ASP.NET Core 7重构了这部分逻辑,必须针对动态生成的视图程序集授权才能访问内部类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 23:11:14