.net - 我最近将我的应用程序从 .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 仍然是同样的错误
解决方案
银秋,可惜我一直没有找到答案。无论如何,是时候重新构建项目/解决方案并复制所有页面了。脚手架适用于这个新的项目/解决方案,因此问题已被“消除”而不是“解决”。当我将目标从 .NET2.1 升级到 .NET5.0 时,我一定错过了一些工具或其他工具,谢谢,约翰
推荐阅读
- google-apps-script - 如何将谷歌表格列中的值与数组进行比较并根据列数据发送到特定电子邮件
- r - 在 R 包中为 inst/extdata 文件夹记录外部数据?
- vue.js - 当我想显示食谱时未定义的对象
- typescript - 打字稿“类型不可分配给类型”错误
- python - 即使在使用“http.client”Python 时引发异常,AssertRaises 也会失败
- html - 相同的 REM 测量会导致不同的像素值
- docker - WSL 2.0,安装卷的 Docker 权限错误,“错误:EACCES:权限被拒绝”
- c# - 在 C# 中使用 SSH.NET 只读取命令输出的前几行,而无需等待命令完全完成
- android - android Stripe数量不变
- api - 脚本 cURl API: message":"无效签名"