C'est l'un des problèmes que j'ai émis dans "Conflits trouvés entre différentes versions" OU System.MissingMethodException lors de l'utilisation de aspnetcore.identity, mais je voulais l'expliquer séparément avec un petit exemple :

Mettre en place:

  1. Une bibliothèque .Net Standard 2.0
  2. Une application WebForms .Net Framework 4.7.2

La bibliothèque standard .Net a ce code :

 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
        }
    }

Et dans le WebForms-Project, il suffit de :

public partial class _Default : Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            Class1.doStuff();
        }
    }

Exception : System.MissingMethodException : 'Methode nicht gefunden : "Microsoft.EntityFrameworkCore.Metadata.Builders.IndexBuilder Microsoft.EntityFrameworkCore.Metadata.Builders.EntityTypeBuilder1.HasIndex(System.Linq.Expressions.Expression1>)".'

Configuration du projet .Net Standard 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>

Références : https://github.com/dotnet/aspnetcore/issues/8467 Ici, ils disent pour mettre à jour vers "Microsoft.AspNetCore.Identity" 3.x, mais je ne peux pas le faire car ce n'est pas compatible avec le projet .Net Standard 2.0 et j'en ai besoin pour le projet WebForms.

Alors ma question serait si quelqu'un connaît une solution de contournement pour générer un gestionnaire d'utilisateurs d'une manière différente... Je dois obtenir et définir des utilisateurs (et valider) en utilisant aspnetcore-identity (la base de données, etc. est déjà migrée )

0
user3675331 30 janv. 2020 à 17:50

1 réponse

Meilleure réponse

J'ai donc une solution à mon problème :

Utilisez Microsoft.EntityFrameworkCore.SqlServer version 2.2.6 (PAS 3.1.1 même s'il est censé fonctionner avec la norme .net 2.0...)

Et une séquence de

  • suppression des packages nuget
  • vider le cache nuget
  • suppression des packages nuget sur l'ordinateur local (dans le dossier C:/../Users/.../.nuget)
  • changer le format de gestion du nuget en "PackageReference"
  • beaucoup pleurer
  • tout réinstaller et gérer les avertissements a aidé

(Je ne peux pas dire quel était exactement le problème concernant les conflits de versions)

0
user3675331 31 janv. 2020 à 14:49