在 .NET Core 项目中添加身份时出现 NullReferenceException

NullReferenceException when adding Identity in .NET Core project

我有一个 ASP.NET Core 6 网络应用程序,它使用 EF Core 进行数据库管理,并使用 ASP.NET 身份功能来管理用户。这个网络应用程序没有问题。

现在,我想开发一个独立的控制台应用程序,用于对数据库执行维护任务(播种、清理操作、恢复出厂设置等)

但是我 运行 遇到了问题。 我在维护应用程序的初始化步骤中添加了与我在 Web 应用程序上使用的相同指令来配置 EF Core 和 Itentity,它们非常简单:

private static IHost CreateHost(string[] args)
{
    var builder = Host.CreateDefaultBuilder(args);
    builder.ConfigureServices((_, services) =>
        {
            services.AddDbContext<MyContext>(options =>
            {
                options.UseSqlite(connectionString);
            });

            services.AddDefaultIdentity<MyUser>(opt => { });
            services.AddScoped<MyDbService>();
        });
    return builder.Build();
}

然而,虽然这些说明在我的网络应用程序中可以正常工作,但在控制台应用程序中却不能。特别是,我在调用 services.AddDefaultIdentity<MyUser>(opt => { });

时得到 NullReferenceException

消息中没有内部异常或其他信息。堆栈跟踪是这样的:

   at Microsoft.AspNetCore.Identity.IdentityBuilderUIExtensions.GetApplicationAssembly(IdentityBuilder builder)
   at Microsoft.AspNetCore.Identity.IdentityBuilderUIExtensions.<>c__DisplayClass0_0.<AddDefaultUI>b__0(ApplicationPartManager apm)
   at Microsoft.Extensions.DependencyInjection.MvcCoreMvcBuilderExtensions.ConfigureApplicationPartManager(IMvcBuilder builder, Action`1 setupAction)
   at Microsoft.AspNetCore.Identity.IdentityBuilderUIExtensions.AddDefaultUI(IdentityBuilder builder)
   at Microsoft.Extensions.DependencyInjection.IdentityServiceCollectionUIExtensions.AddDefaultIdentity[TUser](IServiceCollection services, Action`1 configureOptions)
   at MainetnanceApp.Program.<>c.<CreateHost>b__2_0(HostBuilderContext _, IServiceCollection services)

为什么会这样?它与它是控制台应用程序而不是网络应用程序这一事实有关吗?我该如何解决这个问题?

AddDefaultIdentity 适用于网络应用程序而非控制台应用程序。 它添加 UI、令牌提供程序,并配置身份验证以使用身份 cookie。

对于控制台应用程序,您可以使用 AddIdentityCore