C# .Net标准2.0中的ApplicationDbContext.OnModelCreating()缺少MethodException

C# .Net标准2.0中的ApplicationDbContext.OnModelCreating()缺少MethodException,c#,asp.net-core,asp.net-identity,.net-standard,C#,Asp.net Core,Asp.net Identity,.net Standard,这是我在中提出的问题之一,但我想用一个小例子单独解释: 设置: .Net标准2.0库 .NETFramework 4.7.2WebForms应用程序 .Net标准库具有以下代码: public class Class1 { public static void doStuff() { var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext&g

这是我在中提出的问题之一,但我想用一个小例子单独解释:

设置:

  • .Net标准2.0库
  • .NETFramework 4.7.2WebForms应用程序
  • .Net标准库具有以下代码:

     public class Class1
        {
            public static void doStuff()
            {
                var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
                optionsBuilder.UseSqlServer("MyConnectionString");
    
                var userStore = new UserStore<ApplicationUser, MyRole, ApplicationDbContext, Guid>(
                    new ApplicationDbContext(optionsBuilder.Options)
                    ); // the userStore.Users property shows already the exception in the debugger
    
                AspNetUserManager<ApplicationUser> userManager = new AspNetUserManager<ApplicationUser>(
                    userStore,
                    null,
                    new PasswordHasher<ApplicationUser>(),
                    new List<UserValidator<ApplicationUser>>() { new UserValidator<ApplicationUser>() },
                    null,
                    null,
                    null,
                    null,
                    null
                    );
    
                var x = userManager.Users; // exception throw (see next code snipped)
            }
        }
    
    例外情况: System.MissingMethodException:'Methode nicht gefunden:'Microsoft.EntityFrameworkCore.Metadata.Builders.IndexBuilder Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder
    1.HasIndex(System.Linq.Expressions.Expression
    1>)'

    配置.Net标准2.0项目:

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" />
        <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.2.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.1" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1" />
        <PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="3.1.1" />
      </ItemGroup>
    
    </Project>
    
    
    
    netstandard2.0
    
    参考资料: 这里他们说要更新到“Microsoft.AspNetCore.Identity”3.x,但我不能这样做,因为它与.Net标准2.0项目不兼容,我需要在WebForms项目中使用它


    所以我的问题是,如果有人知道以不同方式生成用户管理器的解决方法。。。我需要使用aspnetcore标识获取和设置用户(并验证)(数据库等已迁移)

    因此,我有一个解决问题的方法:

    使用Microsoft.EntityFrameworkCore.SqlServer版本2.2.6(3.1.1,尽管它应该与.net标准2.0一起使用…)

    和一系列

    • 删除nuget包
    • 清除nuget缓存
    • 正在删除本地计算机上的nuget程序包(在C:/../Users/../nuget文件夹中)
    • 将nuget管理格式更改为“PackageReference”
    • 大哭
    • 重新安装所有程序和处理警告都有帮助
    (我说不出版本冲突的具体问题)

    public partial class _Default : Page
        {
            protected void Page_Load(object sender, EventArgs e)
            {
                Class1.doStuff();
            }
        }
    
    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="Microsoft.AspNetCore.Identity" Version="2.2.0" />
        <PackageReference Include="Microsoft.AspNetCore.Identity.EntityFrameworkCore" Version="2.2.0" />
        <PackageReference Include="Microsoft.EntityFrameworkCore" Version="3.1.1" />
        <PackageReference Include="Microsoft.EntityFrameworkCore.SqlServer" Version="3.1.1" />
        <PackageReference Include="Microsoft.Extensions.Identity.Stores" Version="3.1.1" />
      </ItemGroup>
    
    </Project>