Я застрял с этой проблемой зависимости ...
Моя настройка:
. Net Стандартные библиотеки с кодом aspnetcore.identity (UserManager, IdentityUser, et c) + все необходимые пакеты расширений, такие как Microsoft.Extensions.Identity.Store в версии 2.2.0 (не 3.xx)
База данных уже перенесена в компоновку aspnetcore.identity
- . 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