Переход с ASP.NET Core 3 на ASP.NET Core 6

Я следую учебнику для изучения ASP.NET CORE MVC. Учебник основан на ASP.NET Core 5, тогда как я использую ASP.NET Core 6.

Я уже сделал файл startup.cs с помощью этого туториала, но теперь мне нужно использовать файл program.cs, как это было раньше (в ASP.NET Core 5). Как я могу изменить файл program.cs, чтобы он был похож на файл в ASP.NET Core 5, или есть другой способ использовать код?

Код, который я хочу реализовать в program.cs:

using system;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using LIBRARY.Data;
using LIBRARY.Models;
using LIBRARY;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Identity;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Hosting;
using Microsoft.Extensions.Logging;

namespace Library.MVC
{
    public class Program
    {
        public async static Task Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();
            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                var loggerFactory = services.GetRequiredService<ILoggerFactory>();
                try
                {
                    var context = services.GetRequiredService<ApplicationDbContext>();
                    var userManager = services.GetRequiredService<UserManager<ApplicationUser>>();
                    var roleManager = services.GetRequiredService<RoleManager<IdentityRole>>();
                    await ContextSeed.SeedRolesAsync(userManager, roleManager);
                }
                catch (Exception ex)
                {
                    var logger = loggerFactory.CreateLogger<Program>();
                    logger.LogError(ex, "An error occurred seeding the DB.");
                }
            }
            host.Run();
        }

        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
}

Мой файл startu.cs:

using LIBRARY.Data;
using LIBRARY.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using System.Configuration;

namespace LIBRARY
{
    public class Startup
    {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }
        public IConfiguration Configuration { get; set; }
        public static WebApplication InitializeApp(string[] args)
        {
            var builder = WebApplication.CreateBuilder(args);
            ConfigureServices(builder);
            var app = builder.Build();
            Configure(app);
            return app;
        }

        //



        //

        private static void ConfigureServices(WebApplicationBuilder builder)
        {
            //var connectionString = builder.Configuration.GetConnectionString("DefaultConnection");
            //builder.Services.AddDbContext<ApplicationDbContext>(options =>
            //    options.UseSqlServer(connectionString));
            //builder.Services.AddDatabaseDeveloperPageExceptionFilter();

            //builder.Services.AddDefaultIdentity<IdentityUser>(options => options.SignIn.RequireConfirmedAccount = true)
            //    .AddEntityFrameworkStores<ApplicationDbContext>();
            //builder.Services.AddControllersWithViews();

            builder.Services.AddDbContext<ApplicationDbContext>(options => { options.UseSqlServer(builder.Configuration.GetConnectionString("DefaultConnection")); });
            builder.Services.AddIdentity<ApplicationUser, IdentityRole>()
                    .AddEntityFrameworkStores<ApplicationDbContext>()
                    .AddDefaultUI()
                    .AddDefaultTokenProviders();
            builder.Services.AddControllersWithViews();
            builder.Services.AddRazorPages();

        }

        private static void Configure(WebApplication app)
        {
            if (app.Environment.IsDevelopment())
            {
                app.UseMigrationsEndPoint();
            }
            else
            {
                app.UseExceptionHandler("/Home/Error");
                // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
                app.UseHsts();
            }

            app.UseHttpsRedirection();
            app.UseStaticFiles();

            app.UseRouting();

            app.UseAuthentication();
            app.UseAuthorization();

            app.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
            app.MapRazorPages();

        }
    }
}

И когда я помещаю код программы.cs в файл программы.cs и запускаю его. Это дает следующее исключение:

В чем проблема и как я могу ее решить?

Здравствуйте, Моаз Харун. Вы забыли добавить ключевое слово await перед ключевым словом async.

Vijay Kumavat 05.12.2022 09:40

Уточните, пожалуйста, какие версии ASP.NET вы используете — ASP.NET MVC 5 определенно отличается от ASP.NET CORE 5 MVC!

phuzi 05.12.2022 10:12

Привет, @Moaz Haroon, я проверил предоставленный вами учебник. Этот код предназначен только для заполнения данных в базе данных. Существует множество способов заполнения данных в .Net 6. Из-за этого вам не нужно изменять структуру вашего проекта. . Если вам нужен метод заполнения данных в .net 6, я могу его предоставить.

Xinran Shen 05.12.2022 10:34

Пожалуйста, предоставьте один. @XinranShen

Moaz Haroon 05.12.2022 10:57
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
4
161
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Добавить метод

Public void Configure(IApplicationBuilder, IWebHostingEnvironment){
// your logic goes here
}

Это обязательно для приложений ASP.

Ваша ссылка устарела [aspnetcore-3.0] и не соответствует запрошенной версии. Пожалуйста, отредактируйте свой ответ на запрашиваемую версию

TheTanic 05.12.2022 09:39

Это никогда не было обязательным. Даже Startup не был обязательным. Это удобный класс с методами, используемыми для настройки промежуточного программного обеспечения, такого как конфигурация и DI. Вы можете настроить каждое промежуточное ПО отдельно, если хотите.

Panagiotis Kanavos 05.12.2022 09:46

Хорошо, я обновлю свой вопрос. Но не могли бы вы рассказать об этом немного подробнее? Где я должен сделать функцию настройки и какую логику я должен в нее заложить? Если вы можете сказать мне из моего кода, какую часть я должен добавить в конфигурацию? Я новичок в С# и ASP.NET.

Moaz Haroon 05.12.2022 10:56
Ответ принят как подходящий

Вам просто нужно немного изменить код в своем проекте вместо изменения структуры проекта. Пожалуйста, обратитесь к этой простой демонстрации.

метод сеялки:

public static class ContextSeed
{
    public static async Task SeedRolesAsync(UserManager<ApplicationUser> userManager, RoleManager<IdentityRole> roleManager)
    {
        //Seed Roles
        await roleManager.CreateAsync(new IdentityRole(Enums.Roles.SuperAdmin.ToString()));
        await roleManager.CreateAsync(new IdentityRole(Enums.Roles.Admin.ToString()));
        await roleManager.CreateAsync(new IdentityRole(Enums.Roles.Moderator.ToString()));
        await roleManager.CreateAsync(new IdentityRole(Enums.Roles.Basic.ToString()));
    }
}

Затем в вашей программе.cs

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
//.......................

var app = builder.Build();

await Configure(app);

// Configure the HTTP request pipeline.
//other middleware......
app.Run();


static async Task Configure(WebApplication host)
{
    using var scope = host.Services.CreateScope();
    var services = scope.ServiceProvider;

    try
    {
        var dbContext = services.GetRequiredService<ApplicationDbContext>();          

        var userManager = services.GetRequiredService<UserManager<ApplicationUser>>();
        var roleManager = services.GetRequiredService<RoleManager<IdentityRole>>();
        await ContextSeed.SeedRolesAsync(userManager, roleManager);
    }
    catch (Exception ex)
    {
        //Log some error
        throw;
    }
}

Теперь, когда вы запустите свой проект, он загрузит данные в вашу базу данных.

Привет @Moaz Haroon, может ли этот метод помочь вам решить проблему?

Xinran Shen 06.12.2022 10:08

нет, это не помогло мне решить проблему. Теперь у меня другая проблема в

Moaz Haroon 06.12.2022 11:20

var dbContext = services.GetRequiredService<ApplicationDbContext>();

Moaz Haroon 06.12.2022 11:20

System.InvalidOperationException: «Служба для типа« LIBRARY.Data.ApplicationDbContext »не зарегистрирована».

Moaz Haroon 06.12.2022 11:21

Есть ли способ связаться с вами? Я хотел бы полностью объяснить, с какими проблемами я сталкиваюсь.

Moaz Haroon 06.12.2022 11:22

Вы можете предоставить свою текущую программу.cs?

Xinran Shen 06.12.2022 12:47
drive.google.com/file/d/1CoWh74vwjstVIfJztwRoEuQmWGsceiR7/… Вот мой полный файл проекта. Дайте мне знать, если вы можете мне помочь.
Moaz Haroon 06.12.2022 13:48

Я проверяю предоставленный вами файл. Пожалуйста, восстановите исходную структуру проекта (не используйте startup.cs, только program.cs) и добавьте код, который я предоставил выше.

Xinran Shen 06.12.2022 15:07

В разделе «добавление настраиваемых полей для идентификации пользователя». Я должен изменить функцию ConfigureServices. Как мне сделать эту часть без создания файла startup.cs?

Moaz Haroon 07.12.2022 06:17

Я решил эту проблему. Переделав файл program.cs. Спасибо, @Xinran Shen.

Moaz Haroon 07.12.2022 06:39

Другие вопросы по теме