我最近将我的应用程序定位为.NetCore5.0来自.NetCore2.1,但现在我在尝试使用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="PagesAdmin_AdminLayout.cshtml">
<Pack>$(IncludeRazorContentInPack)</Pack>
</Content>
<Content Update="PagesPermittedMembers_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,仍然存在相同的错误

银秋,很遗憾我一直没有找到答案。无论如何,是时候重新构建项目/解决方案并复制所有页面了。脚手架在这个新项目/解决方案上工作,所以这个问题已经"排除"而不是"解决"了。当我将目标升级到时,我一定丢失了一些工具。NET5.0来自。NET2.1谢谢,John

最新更新