首页 > 解决方案 > 我最近将我的应用程序从 .NetCore2.1 定位到 .NetCore5.0,但现在当我尝试使用 EF 搭建新的 Razor 页面时出现以下错误

问题描述

错误是:运行所选代码生成器时出错:'无法解析服务类型

以下是我的项目文件:

<Project Sdk="Microsoft.NET.Sdk.Web">

<PropertyGroup> 
    <TargetFramework>net5.0</TargetFramework>
    <AspNetCoreHostingModel>OutOfProcess</AspNetCoreHostingModel>
    <UserSecretsId>aspnet-CommunityPricing-9A89DC31-F7DF-4C8A-A4BE-9385CE5271FC</UserSecretsId>
</PropertyGroup>

<ItemGroup>
    <PackageReference Include="Microsoft.AspNetCore.AzureKeyVault.HostingStartup" Version="2.0.2" />
    <PackageReference Include="Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore" Version="5.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="5.0.0" />
    <PackageReference Include="Microsoft.AspNetCore.Identity.UI" Version="5.0.0" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="5.0.4" />
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="5.0.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="AutoMapper.Collection.EntityFrameworkCore" Version="7.0.1" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration" Version="5.0.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Design" Version="5.0.2" />
    <PackageReference Include="Microsoft.VisualStudio.Web.CodeGeneration.Utils" Version="5.0.2" />      
    <PackageReference Include="SendGrid" Version="9.10.0" />
</ItemGroup>

<ItemGroup>
    <Content Update="Pages\Admin\_AdminLayout.cshtml">
        <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
    <Content Update="Pages\PermittedMembers\_PMLayout.cshtml">
        <Pack>$(IncludeRazorContentInPack)</Pack>
    </Content>
</ItemGroup>

<ItemGroup>
    <WCFMetadata Include="Connected Services" />
</ItemGroup>

以下是我的启动文件:它要我输入更多文本

using System;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using CommunityPricing.Data;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.AspNetCore.Identity.UI.Services;
using CommunityPricing.Areas.Identity.Services;
using Microsoft.AspNetCore.Mvc.Authorization;
using Microsoft.AspNetCore.Authorization;
using CommunityPricing.Areas.Authorization;
using Microsoft.Extensions.Hosting;

```
namespace CommunityPricing
{
    public class Startup
        {
        public Startup(IConfiguration configuration)
        {
            Configuration = configuration;
        }

    public IConfiguration Configuration { get; }

   
    public void ConfigureServices(IServiceCollection services)
    {
        services.Configure<CookiePolicyOptions>(options =>
        {
            
            options.CheckConsentNeeded = context => true;
            options.MinimumSameSitePolicy = SameSiteMode.None;
        });

        services.AddDbContext<CommunityPricingContext>(options =>
            options.UseSqlServer(
                Configuration.GetConnectionString("DefaultConnection")));
        

        services.Configure<IdentityOptions>(options =>
        {
            options.Password.RequireDigit = true;
            options.Password.RequireLowercase = true;
            options.Password.RequireNonAlphanumeric = true;
            options.Password.RequireUppercase = true;
            options.Password.RequiredLength = 6;
            options.Password.RequiredUniqueChars = 1;

            options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(10);
            options.Lockout.MaxFailedAccessAttempts = 5;
            options.Lockout.AllowedForNewUsers = true;

            options.User.AllowedUserNameCharacters =
    "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._@+";
            options.User.RequireUniqueEmail = false;
        });

        services.ConfigureApplicationCookie(options =>
        {
            
            options.Cookie.HttpOnly = true;
            options.ExpireTimeSpan = TimeSpan.FromMinutes(10);

            options.LoginPath = "/Identity/Account/Login";
            options.AccessDeniedPath = "/Identity/Account/AccessDenied";
            options.SlidingExpiration = true;
        });
        services.AddRazorPages();
        services.AddMvc(config =>
        {
            var policy = new AuthorizationPolicyBuilder()
                                .RequireAuthenticatedUser()
                                .Build();
            config.Filters.Add(new AuthorizeFilter(policy));
        });
        services.AddSingleton<IEmailSender, EmailSender>();
        services.Configure<AuthMessageSenderOptions>(Configuration);

        services.AddSingleton<IAuthorizationHandler, AdministratorsAuthorizationHandler_Vendor>();
        services.AddSingleton<IAuthorizationHandler, AdministatorsAuthorizationHandler_ProductCategory>();
        services.AddSingleton<IAuthorizationHandler, AdministatorsAuthorizationHandler_Product>();
        services.AddSingleton<IAuthorizationHandler, AdministatorsAuthorizationHandler_Offering>();
    }

    
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
            app.UseMigrationsEndPoint();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseRouting();
        app.UseCors();
        app.UseCookiePolicy();

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

        app.UseEndpoints(endpoints => {
            endpoints.MapRazorPages();
        });
    }
}

}```

___我的程序文件是

```
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using CommunityPricing.Data;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Hosting;
```
namespace CommunityPricing
{
    public class Program
    {
        public static void Main(string[] args)
        {
            var host = CreateHostBuilder(args).Build();

            using (var scope = host.Services.CreateScope())
            {
                var services = scope.ServiceProvider;
                
                try
                {
                    var context = services.GetRequiredService<CommunityPricingContext>();
                    context.Database.Migrate();
                    context.Database.EnsureCreated();

                     
                    var config = host.Services.GetRequiredService<IConfiguration>();
                     
                    var testUserPw = config["SeedUserPW"];
                    SeedData.Initialize(services, testUserPw).Wait();
                }
                catch (Exception ex)
                {
                    var logger = services.GetRequiredService<ILogger<Program>>();
                    logger.LogError(ex.Message, "An error occurred seeding the DB.");
                }
            }

            host.Run();

             
        }

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

如上所述是我的启动和程序文件

    namespace CommunityPricing.Data
{
    public class CommunityPricingContext : IdentityDbContext<ApplicationUser>
    {
        public CommunityPricingContext(DbContextOptions<CommunityPricingContext> options)
            : base(options)
        {
        }
        public DbSet<CommunityPricing.Models.ProductCategory> ProductCategory { get; set; }
        public DbSet<CommunityPricing.Models.Product> Product { get; set; }
        public DbSet<CommunityPricing.Models.Vendor> Vendor { get; set; }
        public DbSet<CommunityPricing.Models.Offering> Offering { get; set; }
        public DbSet<CommunityPricing.Models.ArchivedOffering> ArchivedOffering { get; set; }

    }
}

还重新安装了 VS2019 仍然是同样的错误

标签: .netvisual-studio

解决方案


银秋,可惜我一直没有找到答案。无论如何,是时候重新构建项目/解决方案并复制所有页面了。脚手架适用于这个新的项目/解决方案,因此问题已被“消除”而不是“解决”。当我将目标从 .NET2.1 升级到 .NET5.0 时,我一定错过了一些工具或其他工具,谢谢,约翰


推荐阅读