IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C# Discussion :

Impossible de charger le fichier ou l'assembly 'Microsoft.EntityFrameworkCore.Relational, Version=


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut Impossible de charger le fichier ou l'assembly 'Microsoft.EntityFrameworkCore.Relational, Version=
    Bonsoir,
    J'ai un problème d'assemblage quelque peu étrange.

    Situation :
    J'ai une solution avec plusieurs projets dedans :
    1 - Une DAL (Data Access Layer)
    2 - Un métier
    3 - Un service (enfin pas encore, pour le moment c'est une application console qui sera mise en service par la suite)

    J'utilise Entity Framework Core 3.1.10.

    Ayant utilisé Entity Framework 6.0 fût un temps autre, on pouvait remplir les données initiales dans le projet. Cette organisation n'est plus avec EFCore, j'ai donc fait une "verrue" pour la remplir si une table était détectée vide (verrue faite dans le constructeur DalContext afin d'assurer le remplissage de la base avant sa première utilisation).

    Tout fonctionne à merveille... Ca fait 3 mois que cela fonctionne même...

    Mais la verrue n'est pas du goût du chef de projet et il m'a demandé de faire un projet d'initialisation à part. J'ai donc fait ce projet où j'ai récupéré tout ce qui était dans mon constructeur et ai vidé ma verrue, mon constructeur est réduit à peau de chagrin par la vérification de la table pour générer un message d'erreur au cas où la base serait vide.

    Bien, maintenant, j'exécute le projet initiale (ma base est déjà remplie) => Tout se passe toujours bien
    Je lance maintenant mon initialisation (qui peut aussi vider la base de données pour la re-remplir) et dans mon constructeur DalContext, lors du contrôle de la table remplie ou non (avec un .Count()), j'ai le message d'erreur suivant (dans l'InnerException) :
    Impossible de charger le fichier ou l'assembly 'Microsoft.EntityFrameworkCore.Relational, Version=3.1.10.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' ou une de ses dépendances. La définition trouvée du manifeste de l'assembly ne correspond pas à la référence de l'assembly. (Exception de HRESULT : 0x80131040)
    Au cas où ce soit utile, l'exception est :
    Une exception a été levée par la cible d'un appel.
    Pourquoi cela me fait ça quand je viens du projet d'initialisation et pas du projet d'exécution ?

    Voici en supplément :
    1 - Le FusionLog
    === Informations d'état de liaison préalable ===
    JRN*: DisplayName = Microsoft.EntityFrameworkCore.Relational, Version=3.1.10.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
    (Fully-specified)
    JRN*: Appbase = file:///C:/Users/xxx/source/repos/MaSolution/MonProjetIntialisation/bin/Debug/
    JRN*: PrivatePath initial = NULL
    Assembly appelant*: MaDAL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null.
    ===
    JRN*: cette liaison démarre dans le contexte de chargement de default.
    JRN*: utilisation du fichier de configuration de l'application*: C:\Users\xxx\source\repos\MaSolution\MonProjetIntialisation\bin\Debug\MonProjetIntialisation.exe.Config
    JRN*: utilisation du fichier de configuration d'hôte*:
    JRN*: utilisation du fichier de configuration de l'ordinateur à partir de C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config.
    JRN*: référence post-stratégie*: Microsoft.EntityFrameworkCore.Relational, Version=3.1.10.0, Culture=neutral, PublicKeyToken=adb9793829ddae60
    JRN*: tentative de téléchargement de la nouvelle URL file:///C:/Users/xxx/source/repos/MaSolution/MonProjetIntialisation/bin/Debug/Microsoft.EntityFrameworkCore.Relational.DLL.
    AVT*: la comparaison du nom de l'assembly a entraîné l'incompatibilité*: Numéro de build
    ERR*: impossible de terminer l'installation de l'assembly (hr = 0x80131040). Détection terminée.
    2 - La StackTrace :
    à MonProjetDAL.EntityTypeConfiguration.NNLinksConfiguration.Configure(EntityTypeBuilder`1 builder) dans C:\Users\xxx\source\repos\MaSolution\MonProjetDAL\EntityTypeConfiguration\NNLinksConfiguration.cs :ligne 56
    à Microsoft.EntityFrameworkCore.ModelBuilder.ApplyConfiguration[TEntity](IEntityTypeConfiguration`1 configuration)
    Déjà la StackTrace m'envoie sur une ligne alors allons-y =>Stupeur : c'est l'accolade de fermeture de la méthode Configure !!!
    Je la met ici au cas où cela puisse être utile :
    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
     
    using MonProjetDAL.Persistence;
    using Microsoft.EntityFrameworkCore;
    using Microsoft.EntityFrameworkCore.Metadata.Builders;
    using System;
    using System.Linq;
     
    namespace MonProjetDAL.EntityTypeConfiguration
    {
        /// <summary>
        /// Configuration de l'association de 2 objets avec un lien N-N des 2 entités
        /// </summary>
        /// <typeparam name="Object1">Object1</typeparam>
        /// <typeparam name="Object2">Object2</typeparam>
        public class NNLinksConfiguration :
            IEntityTypeConfiguration<NNLink>
        {
            public void Configure(EntityTypeBuilder<NNLink> builder)
            {
                // Code générique
                builder.HasKey(o => new { o.Identifier1ID, o.Identifier2ID });
     
                var identifier = nameof(Identifier);
                var id = nameof(Identifier.ID);
     
                var links = builder.GetType()
                                   .GenericTypeArguments[0]
                                   .GetProperties()
                                   .Where(o => o.Name == identifier + "1" || o.Name == identifier + "2");
     
                if (links.Count() != 2)
                    throw new Exception("La table d'association N-N n'a pas trouvé les 2 tables auxquelles elle doit être liée.");
     
                foreach (var item in links)
                    builder.Property(item.Name + id)
                           .HasColumnName(item.PropertyType.Name + id);
     
                // Code plus simple mais trop spécifique
                //builder.Property("Identifier1ID")
                //       .HasColumnName("Object1ID");
     
                //builder.Property("Identifier2ID")
                //       .HasColumnName("Object2ID");
     
                ////builder
                //// .HasOne("Identifier1")
                //// .WithMany()
                //// .HasForeignKey("Identifier1ID")
                //// .OnDelete(DeleteBehavior.Restrict);
     
                ////builder
                //// .HasOne("Identifier2")
                //// .WithMany()
                //// .HasForeignKey("Identifier2ID")
                //// .OnDelete(DeleteBehavior.Restrict);
            }
        }
    }

    Et là, je ne sais pas quoi faire avec cette ligne... Et pourquoi cela fonctionne-t-il correctement avec MonProjetConsole et pas avec MonProjetInitialisation ?

    Ensuite, j'ai eu la curiosité de supprimer complètement mon constructeur, pas de changement pour MonProjetConsole mais pour MonProejtInitialisation, voici mon message d'erreur (dans l'Exception et pas dans l'InnerException) :
    System.InvalidOperationException*: 'Unable to determine the relationship represented by navigation property 'Object2.Object2Object2LinkChild' of type 'ICollection<Object2Object2Link>'. Either manually configure the relationship, or ignore this property using the '[NotMapped]' attribute or by using 'EntityTypeBuilder.Ignore' in 'OnModelCreating'.'
    Mais bon sang, ça fonctionne avec MonProjetConsole alors pourquoi cette autre erreur sur un autre objet (ce n'est pas le même lien) quand je suis dans MonProjetInitialisation ?

    Merci pour votre attention et sur cette heure tardive, je m'en vais me coucher (j'espère n'avoir rien oublié)...

  2. #2
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Novembre 2010
    Messages
    188
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Conseil

    Informations forums :
    Inscription : Novembre 2010
    Messages : 188
    Par défaut
    Bonsoir,
    Bon, après avoir laissé de côté quelque jours, je suis revenu sur ce sujet hier et j'ai trouvé une partie de la réponse.
    Mon nuget package Microsoft.EntityFrameworkCore.SqlServer était resté en 3.1.9 lors de ma migration vers le 3.1.10, et comme c'est lui qui s'appuie sur Microsoft.EntityFrameworkCore.Relational, ce dernier était aussi resté en 3.1.9 Donc ce problème est réglé...

    Par contre, en ce qui concerne mon problème d'InvalidOperationException, je n'ai pas trouvé, si je met un accès à n'importe quelle table dans le constructeur, je n'ai plus de problème pour le reste de l'application, alors qu'en ne mettant rien dans le constructeur, j'ai le problème évoqué... Et finalement ce n'est pas que dans mon projet d'initialisation de données mais toutes application qui s'en sert. Je ne l'avait pas vu auparavent car j'ai un accès à une table dans mon constructeur. Des idées de compréhension ? Sinon je garde un MaTable.Count dans le constructeur et ça passe...

    Merci pour votre lecture et encore plus pour votre réponse

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/08/2019, 17h09
  2. Réponses: 0
    Dernier message: 15/06/2017, 19h23
  3. Réponses: 3
    Dernier message: 06/10/2010, 15h39
  4. Impossible de charger le fichier ou l'assembly
    Par bzh_coder dans le forum C#
    Réponses: 1
    Dernier message: 25/06/2010, 16h58
  5. Impossible de charger le fichier ou l'assembly 'Multitouch.Framework.WPF
    Par JeffPalmier dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 07/12/2009, 16h16

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo