«Обнаружены конфликты между разными версиями» ИЛИ System.MissingMethodException при использовании aspnetcore.identity - PullRequest
0 голосов
/ 29 января 2020

Я застрял с этой проблемой зависимости ...

Моя настройка:

  1. . Net Стандартные библиотеки с кодом aspnetcore.identity (UserManager, IdentityUser, et c) + все необходимые пакеты расширений, такие как Microsoft.Extensions.Identity.Store в версии 2.2.0 (не 3.xx)

  2. База данных уже перенесена в компоновку aspnetcore.identity

  3. . NET 4.7.2 Веб-формы GUI, которая должна использовать. Net Стандартные DLL

Теперь я хочу получить доступ к Пользователям в приложении WebForms с помощью этого кода:

using System.Collections.Generic;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using MyNetStandard20LibraryWithTheIdentityClasses;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Identity.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore;

namespace WebApplication2
{
    public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            var optionsBuilder = new DbContextOptionsBuilder<ApplicationDbContext>();
            optionsBuilder.UseSqlServer(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ConnectionString);

            var userStore = new UserStore<ApplicationUser, ApplicationRole, ApplicationDbContext, Guid>(
                new ApplicationDbContext(optionsBuilder.Options)
                );
            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!
        }
    }
}

Обратите внимание, что класс ApplicationUser находится в отдельной точке net стандартной DLL.

Хорошо, что «UseSqlServer ()» не работает, и мне нужно установить «Microsoft.EntityFrameworkCore.SqlServer» (который устанавливает «System.Data.SqlClient» d ie в зависимость).

И теперь я получаю сообщение об ошибке " предупреждение MSB3277: обнаружены конфликты между различными версиями" System.D ata.SqlClient ", который не может быть решен. "

Видите ли вы какие-либо серьезные проблемы в моем подходе? Я просто хочу "нормально" использовать таблицы AspNetCore.Identity в проекте WebForms. Все Dll реализуют. Net стандарт 2.0, и я предполагаю, что все должно быть в порядке, верно?

Тогда другой вопрос: как мне подойти к проблеме с «конфликтами между различными версиями». Это сделано в минимальном примере. Если я хочу использовать все это в реальном приложении WebForms, я получаю ту же ошибку на большинстве устанавливаемых дополнительных пакетов ...

Обновление: Если я обновляю пакеты расширений до 3.1.1 вышеупомянутая проблема решена, но затем я выполняю код, который я получаю эту ошибку: right

System.MissingMethodException HResult = 0x80131513 Message = Methode nicht gefunden: "Microsoft.EntityFrameworkCore.Metadata.Builders.IndexBuilder Microsoft. EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder 1.HasIndex(System.Linq.Expressions.Expression 1>)». Source = StackTrace:

Я нашел это: https://github.com/dotnet/aspnetcore/issues/8467

Я не уверен, как решить эту проблему. Мне нужно, чтобы мои библиотеки были в. Net Standard, а приложение Webforms - в. Net Framework 4.7.

Решение, которое я не могу использовать ... Установите 3.x Microsoft.AspNetCore.Identity. Я не могу этого сделать, потому что он несовместим с. Net 4.7.2 (nuget не устанавливает его ...) https://github.com/dotnet/aspnetcore/issues/11021

Обновление I опубликовал одну из проблем в конкретном c случае здесь: ApplicationDbContext.OnModelCreating () в. Net Стандарт 2.0 имеет исключение MissingMethodException

1 Ответ

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

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

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

И последовательность удаления пакетов nuget, очистка кэша nuget, удаление пакетов nuget на локальном компьютере (в папке C: /../ Users /.../. Nuget), изменение Формат управления nuget в «PackageReference», переустановка всего и обработка предупреждений помогли (я не могу сказать, в чем именно проблема, связанная с конфликтами версий)

См. ApplicationDbContext.OnModelCreating () в. Net Стандарт 2.0 имеет MissingMethodException для получения дополнительной информации

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