ApplicationDbContext.OnModelCreating () in. Net Стандарт 2.0 имеет исключение MissingMethodException - PullRequest
0 голосов
/ 30 января 2020

это одна из проблем, с которыми я столкнулся в «Обнаружены конфликты между разными версиями» ИЛИ System.MissingMethodException при использовании aspnetcore.identity , но я хотел объяснить это отдельно на небольшом примере:

SetUp:

  1. A. Net Стандартная библиотека 2.0
  2. 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. уже перенесено)

1 Ответ

0 голосов
/ 31 января 2020

Итак, у меня есть решение для моей проблемы:

используйте Microsoft.EntityFrameworkCore.SqlServer версии 2.2.6 ( НЕ 3.1.1, даже если предполагается, что он будет работать. net стандарт 2.0 ...)

И последовательность

  • удаление пакетов нугетов
  • очистка кеша
  • удаление пакетов нативов на локальном компьютер (в папке C: /../ Users /.../. nuget)
  • изменение формата управления nuget на "PackageReference"
  • много плакать
  • переустановка всего и обработка предупреждений помогли

(я не могу сказать, что именно проблема была связана с конфликтами версий)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...