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

ASP.NET Core 6集成测试中Program类访问权限与入口点冲突问题求助

ASP.NET Core 6集成测试中Program类访问权限与入口点冲突问题求助

兄弟,我之前也碰到过一模一样的问题,其实这都是ASP.NET Core 6的顶级语句特性搞的鬼,给你说个简单又靠谱的解决办法:

首先得搞清楚问题根源:

  • ASP.NET Core 6默认用顶级语句写Program.cs,编译器会自动生成一个internal的Program类和入口方法,所以你的测试项目(和Web项目不是同一个程序集)根本访问不到这个类,就会报“The ‘Program’ element is inaccessible due to the protection level”错误。
  • 如果你直接给Program.cs加命名空间和public class Program,相当于手动又定义了一个带Main方法的类,加上编译器自动生成的那个,就会出现两个入口点,触发“CS0017: More than one entry point is defined”错误。

最优解决步骤:

  1. 不用修改原有的顶级语句代码,直接在你的Program.cs文件的最末尾添加一行代码:
public partial class Program { }

这行代码的作用是把编译器自动生成的Program类标记为public的partial类,既不会新增入口点,又能让测试项目访问到它。

  1. 在你的集成测试项目里,就能正常引用Web项目的Program类来创建测试工厂了,示例代码如下:
using var factory = new WebApplicationFactory<Program>();
var testClient = factory.CreateClient();

// 接下来就可以用testClient调用你的Token API做集成测试啦
var response = await testClient.PostAsync("/api/token", yourRequestContent);
// 验证响应结果...

另一种备选方案(稍繁琐):

如果你更习惯显式的类结构,也可以把Program.cs改成传统的类写法,确保只有一个入口点:

namespace TokenProject;

public class Program
{
    public static void Main(string[] args)
    {
        var builder = WebApplication.CreateBuilder(args);

        // 把你原来的所有配置代码(CORS、DbContext、JWT认证等)都放到这里
        builder.Services.AddCors(options =>
        {
            options.AddPolicy("AllowAngularApp",
                builder =>
                {
                    builder.WithOrigins("你的Angular地址")
                           .AllowAnyHeader()
                           .AllowAnyMethod();
                });
        });
        // 其他配置...

        var app = builder.Build();

        // 中间件配置...
        app.UseCors("AllowAngularApp");
        app.UseAuthentication();
        app.UseAuthorization();

        app.MapControllers();

        app.Run();
    }
}

这样改完后,测试项目也能直接引用TokenProject.Program类,而且不会出现入口点冲突的问题。

备注:内容来源于stack exchange,提问作者Meliqe

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.15 12:58:04