это одна из проблем, с которыми я столкнулся в «Обнаружены конфликты между разными версиями» ИЛИ System.MissingMethodException при использовании aspnetcore.identity , но я хотел объяснить это отдельно на небольшом примере:
SetUp:
- A. Net Стандартная библиотека 2.0
- A. Net Framework 4.7.2 Приложение WebForms
. 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)
}
}
public class ApplicationDbContext : IdentityDbContext<ApplicationUser, MyRole, Guid>
{
public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder); // after userManager.Users is called the exception is thrown here
}
}
А в WebForms-Project просто:
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
Class1.doStuff();
}
}
Исключение: System.MissingMethodException : 'Method 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>
Ссылки: https://github.com/dotnet/aspnetcore/issues/8467 Здесь говорится, чтобы обновить до «Microsoft.AspNetCore.Identity» 3.x, но Я не могу этого сделать, потому что он не совместим с. Net Standard 2.0 проект, и мне нужно это для проекта WebForms.
Так что мой вопрос будет, если кто-то знает обходной путь для создания Usermanager по-другому ... Мне нужно получить и установить пользователей (и проверять) с использованием aspnetcore-identity (база данных et c. уже перенесено)