Comment résoudre l’erreur «Impossible de charger le fichier ou l’assembly ‘Microsoft.Practices.Prism’»?

Je cherchais depuis quelques jours à réparer une erreur dans une application WPF utilisant Prism, mais je n’avais aucune chance et je pensais que je verrais si Stackoverflow avait des idées. S’il vous plaît noter que je suis certainement un noob quand il s’agit de Prism en général 🙂

Je suis en train d’apprendre à créer une application à l’aide de Prism, Unity étant mon conteneur de choix pour l’dependency injection. J’essaie de charger des modules à l’aide d’un fichier App.config modifié, mais j’obtiens une erreur d’exécution liée au bootstrapper. Les messages d’erreur seront plus précis que toute explication que je puisse fournir. J’ai donc inclus le fichier App.config, le fichier App.xaml.cs où l’erreur apparaît et les informations d’erreur ci-dessous.

Nous vous remercions par avance pour toute information que vous pouvez fournir, et laissez-moi savoir s’il existe des informations supplémentaires dont vous pourriez avoir besoin!

EDIT : ce répertoire de fichier référencé dans l’erreur (C: \ Utilisateurs \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ bin \ Debug \ WpfApplication1.exe.Config de ligne 4) fait référence à la quasortingème ligne du fichier App.config (nom de la section = …). Tous les tutoriels et références que j’ai trouvés sont les mêmes que ceux que j’ai, mais c’est toujours la ligne qui pose problème, semble-t-il.

EDIT 2 : la ligne référencée dans la première édition est en réalité exactement identique à celle du guide officiel Microsoft Prism .

EDIT 3 : Je n’ai donc jamais trouvé la cause de ce problème, mais dans ma frustration, j’ai relancé l’exemple de projet sur lequel je travaillais et je ne reçois pas l’erreur dans le nouveau projet. Je ne sais toujours pas quelle était la racine du problème.

EDIT 4 : Je plaisante, la même erreur est de retour dans le nouveau programme.


App.config:

   

App.xaml.cs (une erreur apparaît sur la ligne “bootstrapper.Run ()”):

 using System; using System.Collections.Generic; using System.Configuration; using System.Data; using System.Linq; using System.Threading.Tasks; using System.Windows; namespace EmailClient { ///  /// Interaction logic for App.xaml ///  public partial class App : Application { protected override void OnStartup(StartupEventArgs e) { base.OnStartup(e); MyBootstrapper bootstrapper = new MyBootstrapper(); bootstrapper.Run(); } } } 

Message d’erreur:

System.Configuration.ConfigurationErrorsException n’était pas gérée HResult = -2146232062 Message = Une erreur s’est produite lors de la création du gestionnaire de section de configuration pour les modules: Impossible de charger le fichier ou l’assembly ‘Microsoft.Practices.Prism’ ou l’une de ses dépendances. Le système ne peut pas trouver le fichier spécifié. (Ligne 4: C: \ Utilisateurs \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ bin \ Debug \ WpfApplication1.exe.Config) Source = System.Configuration BareMessage = Une erreur s’est produite lors de la création du gestionnaire de section de configuration pour les modules: Impossible de charger le fichier ou l’assembly ‘Microsoft.Practices.Prism’ ou l’une de ses dépendances. Le système ne peut pas trouver le fichier spécifié. Filename = C: \ Utilisateurs \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ bin \ Debug \ WpfApplication1.exe.Config Line = 4 StackTrace: Vous pouvez vous en procurer à la base.BaseConfigurationRecord. .IInternalConfigSystem.GetSection (Ssortingng sectionName) at System.Configuration.ConfigurationManager.Get (Ssortingng sectionName) at Microsoft.Practices.Prism.Modularity.ConfigurationStore.ResortingeveModuleConfigurationSon (s). .Practices.Prism.Modularity.Con figurationModuleCatalog.InnerLoad () à Microsoft.Practices.Prism.Modularity.ModuleCatalog.Load () à Microsoft.Practices.Prism.Modularity.ModuleCatalog.Initialize () à Microsoft.Practices.Prism.Modularity.ModularManager.Rod (.). Pratiques c: \ Utilisateurs \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ App.xaml.cs: ligne 21 à System.Windows.Application. b__1 (Objet non utilisé) à System.Windows.Threading.ExceptionWrapper.InternalRealCall ( Rappel de délégué, arguments d’object, nombre d’arguments Int32) à l’adresse MS.Internal.Threading.ExceptionFilterHelper.TryCatchWhen (source d’object, méthode de délégation, arguments d’argument Int32, délégué catchHandler) à System.Windows.Threading.DispatcherOperation.InvokeImpl () à System. Windows.Threadi ng.DispatcherOperation.InvokeInSecurityContext (Etat d’object) à System.Threading.ExecutionContext.RunInternal (ExecutionContext executionContext, ) à System.Threading.ExecutionContext.Run (ExecutionContext executionContext, rappel ContextCallback, état de l’object) à System.Windows.Threading.DispatcherOperation.Invoke () à System.Windows.Threading.Dispatcher.ProcessQueue () à System.Windows.Threading. Dispatcher.WndProcHook (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & manipulé) à MSF. DispatcherCallbackOperation (Object o) à System.Windows.Threading.ExceptionWrapper.InternalRealCall (Rappel de délégué, Arguments, Int32, numArgs) à MS.Internal.Threadin g.ExceptionFilterHelper.TryCatchWhen (Source de l’object, méthode Delegate, Arguments de l’object, Int32 numArgs, Delegate catchHandler) à System.Windows.Threading.Dispatcher.LegacyInvokeImpl (priorité DispatcherPriority, délai TimeSpan, méthode Delegate, argument Arguments, Int32 numArgs) dans MS Win32. .Dispatcher.PushFrame (cadre DispatcherFrame) à System.Windows.Threading.Dispatcher.Run () à System.Windows.Application.RunDispatcher (Object ignore) à System.Windows.Application.RunInternal (fenêtre fenêtre) à System.Windows.Application .Run (fenêtre fenêtre) à System.Windows.Application.Run () à EmailClient.App.Main () dans c: \ Utilisateurs \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ obj \ Debug \ App.g.cs: ligne 50 InnerException: System.IO.FileNotFoundException HResult = -2147024894 Message = Impossible de charger le fichier ou l’assembly ‘Microsoft.Practices.Prism’ ou l’une de ses dépendances. Le système ne peut pas trouver le fichier spécifié. Source = System.Configuration FileName = Microsoft.Practices.Prism FusionLog ==== Informations sur l’état de liaison préalable === LOG: DisplayName = Microsoft.Practices.Prism (partiel) WRN: Des informations de liaison partielles ont été fournies pour un assembly: WRN: Nom de l’assembly: Microsoft.Practices.Prism | ID de domaine: 1 WRN: une liaison partielle se produit lorsqu’une partie seulement du nom d’affichage de l’assembly est fournie. WRN: le classeur pourrait charger un assemblage incorrect. WRN: il est recommandé de fournir une identité textuelle entièrement spécifiée pour l’assembly, WRN: constituée du nom simple, de la version, de la culture et du jeton de clé publique. WRN: voir le livre blanc http://go.microsoft.com/fwlink/?LinkId=109270 pour plus d’informations et des solutions courantes à ce problème. LOG: Appbase = fichier: /// C: / Utilisateurs / Roger / Documents / TestPrismProject / WpfApplication1 / WpfApplication1 / bin / Debug / LOG: Initial PrivatePath = NULL Assembly d’appel: System.Configuration, Version = 4.0.0.0, Culture = neutre , PublicKeyToken = b03f5f7f11d50a3a. LOG: Cette liaison commence dans le contexte de chargement par défaut. LOG: Utilisation du fichier de configuration de l’application: C: \ Utilisateurs \ Roger \ Documents \ TestPrismProject \ WpfApplication1 \ WpfApplication1 \ bin \ Debug \ WpfApplication1.exe.Config LOG: Utilisation du fichier de configuration de l’hôte: LOG: Utilisation du fichier de configuration de la machine à partir de C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config. LOG: la stratégie n’est pas appliquée à la référence à l’heure actuelle (liaison d’assembly privée, personnalisée, partielle ou basée sur l’emplacement). LOG: tentative de téléchargement du nouveau fichier URL: /// C: /Users/Roger/Documents/TestPrismProject/WpfApplication1/WpfApplication1/bin/Debug/Microsoft.Practices.Prism.DLL. LOG: Tentative de téléchargement du nouveau fichier URL: /// C: /Users/Roger/Documents/TestPrismProject/WpfApplication1/WpfApplication1/bin/Debug/Microsoft.Practices.Prism/Microsoft.Practices.Prism.DLL. LOG: tentative de téléchargement du nouveau fichier URL: /// C: /Users/Roger/Documents/TestPrismProject/WpfApplication1/WpfApplication1/bin/Debug/Microsoft.Practices.Prism.EXE. LOG: Tentative de téléchargement du nouveau fichier URL: /// C: /Users/Roger/Documents/TestPrismProject/WpfApplication1/WpfApplication1/bin/Debug/Microsoft.Practices.Prism/Microsoft.Practices.Prismices.Prism.EXE.

  StackTrace: at System.Configuration.TypeUtil.GetTypeWithReflectionPermission(IInternalConfigHost host, Ssortingng typeSsortingng, Boolean throwOnError) at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.Init(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord) at System.Configuration.RuntimeConfigurationRecord.RuntimeConfigurationFactory.InitWithRessortingctedPermissions(RuntimeConfigurationRecord configRecord, FactoryRecord factoryRecord) at System.Configuration.RuntimeConfigurationRecord.CreateSectionFactory(FactoryRecord factoryRecord) at System.Configuration.BaseConfigurationRecord.FindAndEnsureFactoryRecord(Ssortingng configKey, Boolean& isRootDeclaredHere) InnerException: 

La solution a fini par être simple, comme souvent. Je n’avais pas changé l’action de construction de mon fichier App.config en “Ressource” (vous pouvez le trouver en cliquant sur le fichier App.config et en consultant la section des propriétés) .

J’avais la même exception (Prism 5.0) et ma solution consistait à définir le type de la section de configuration sur Microsoft.Practices.Prism.Composition au lieu de Microsoft.Practices.Prism, ce que j’ai trouvé dans de nombreux exemples.

Ajoutez une référence Microsoft.Practices.ServiceLocation à votre projet test pour résoudre ce problème.

Dans les versions les plus récentes de Prism (j’utilise la version ModulesConfigurationSection ), la classe ModulesConfigurationSection est dans Prism.Wpf.dll .

Changez votre configuration pour ceci:

  

StackTrace: at System.Configuration. Configuration.BaseConfigurationRecord.GetSection (Ssortingng configKey) at System.Configuration.ClientConfigurationSystem.System.Configuration.Internal.IInternalConfigSystem.GetSection (Ssortingng sectionName) at System.Configuration.Configuration.Configuration.Configuration.S’agrémenterproduire.lire ConfigurationStore.ResortingeveModuleConfigurationSection () à

La stack d’appels elle-même indique que Prism est déjà chargé, mais lorsqu’il tente d’parsingr le fichier .config, une exception se produit dans ResortingeveModuleConfigurationSection .

Vous pourriez commencer par là pour vérifier quelle pourrait en être la cause.

J’ai changé la version 6.2.1 de Prism.Core en 6.2.0 et cela fonctionne pour moi.

J’ai rencontré un problème similaire la dernière fois. Ma solution était différente et très spécifique, mais l’erreur était la même. Si vous vous envoyez des fichiers binarys et que le PC cible utilise Windows 10, veillez à débloquer tous les fichiers.