42 votes

Pourquoi ai-je obtenu une erreur avec mon XmlSerializer ?

J'ai apporté quelques modifications à mon application et j'ai commencé à obtenir l'erreur suivante à cette ligne de code.

Dim Deserializer As New Serialization.XmlSerializer(GetType(Groups))

Et voici l'erreur.

    BindingFailure was detected
    Message: The assembly with display name 'FUSE.XmlSerializers' failed to load in the 'LoadFrom' binding context of the AppDomain with ID 1. The cause of the failure was: System.IO.FileNotFoundException: Could not load file or assembly 'FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null'

    Message: The assembly with display name 'FUSE.XmlSerializers' failed to load in the 'LoadFrom' binding context of the AppDomain with ID 1. The cause of the failure was: System.IO.FileNotFoundException: Could not load file or assembly 'FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
File name: 'FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null'

=== Pre-bind state information ===
LOG: User = DOUG-VM\Doug
LOG: DisplayName = FUSE.XmlSerializers, Version=8.11.16.1, Culture=neutral, PublicKeyToken=null, processorArchitecture=MSIL
 (Fully-specified)
LOG: Appbase = file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/
LOG: Initial PrivatePath = NULL
Calling assembly : System.Xml, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089.
===
LOG: This bind starts in default load context.
LOG: Using application configuration file: E:\Laptop\Core Data\Data\Programming\Windows\DotNet\Work Projects\NOP\Official Apps\FUSE WPF\Fuse\bin\Debug\FUSE.vshost.exe.config
LOG: Using machine configuration file from C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
LOG: Attempting download of new URL file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/FUSE.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/FUSE.XmlSerializers/FUSE.XmlSerializers.DLL.
LOG: Attempting download of new URL file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/FUSE.XmlSerializers.EXE.
LOG: Attempting download of new URL file:///E:/Laptop/Core Data/Data/Programming/Windows/DotNet/Work Projects/NOP/Official Apps/FUSE WPF/Fuse/bin/Debug/FUSE.XmlSerializers/FUSE.XmlSerializers.EXE.

Qu'est-ce qui se passe ?

68voto

Doug Points 1108

La raison principale pour laquelle cela se produisait était qu'il y avait un décalage entre les types que j'essayais de sérialiser et de désérialiser. Je sérialise ObservableCollection (of Group) et je désérialise un objet métier - Groups qui hérite de ObservableCollection (of Group).

Et c'était aussi une partie du problème... De - http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/9f0c169f-c45e-4898-b2c4-f72c816d4b55/

Cette exception fait partie du fonctionnement normal de fonctionnement normal de XmlSerializer. Elle est attendue et sera attrapée et gérée et traitée dans le code du Framework. Ignorez-la et continuez. Si cela pendant le débogage, configurez le débogueur de débogueur de Visual Studio pour qu'il ne s'arrête que sur exceptions non gérées au lieu de toutes les exceptions.

8voto

Lukasz M Points 3232

D'après les informations que j'ai trouvées, l'exception BindingFailure associée aux XmlSerializers n'indique parfois aucune erreur et doit être simplement ignorée, mais vous pouvez parfois la voir, c'est-à-dire en mode débogage, lorsque vous avez défini les options VS pour afficher toutes les exceptions lancées.

Source : https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=88566&wa=wsignin1.0

En fait, c'est plus ou moins l'une des choses mentionnées dans la première réponse :).

1voto

Brody Points 1859

Il semble que vous ne puissiez pas localiser l'assemblage FUSE.XmlSerializers. Vérifiez les résultats de la commande Visualiseur de journaux de liaison d'assemblage (Fuslogvw.exe) pour voir où il cherche (bien que la liste présentée ci-dessus semble assez complète).

Essayez de localiser l'endroit où cet assemblage est stocké sur votre ordinateur et exécutez NGen pour voir s'il ne se charge pas pour une raison quelconque. Assurez-vous que ce fichier DLL apparaît dans votre fichier Bin \Debug répertoire. Visual Studio ne semble pas obtenir les dépendances des dépendances, et vous devez donc parfois vous assurer que vous avez tous les fichiers dont vous avez besoin vous-même.

0voto

Kent Boogaart Points 97432

Comment avez-vous chargé l'assemblage contenant le Groups type ? Je suppose que vous l'avez chargé avec Assembly.LoadFrom() parce que le sérialiseur XML utilise le même contexte (le contexte "LoadFrom") pour tenter de charger les assemblages à sérialiser. Si c'est le cas, vous avez deux possibilités :

  1. Utilisez Assembly.Load() au lieu de Assembly.LoadFrom() .
  2. Attachez un gestionnaire à AppDomain.AssemblyResolve pour aider le CLR à trouver l'assemblage en question.

0voto

ScottWelker Points 156

Pour les quelques projets Visual Studio que j'ai et pour lesquels cela constitue une gêne, je préfère désactiver la rupture en cas d'exception pour les seuls éléments suivants Échec de la reliure y el System.IO.FileNotFoundException (exception) .

Dans Visual Studio : Ctl-D, Ctl-E pour la boîte de dialogue Exceptions :

1) Décochez BindingFailure sous la rubrique Assistants de débogage gérés

2) Décochez la case System.IO.FileNotFoundException sous Exceptions du Common Language Runtime .

Ahhhh c'est mieux :-)

...et je vois 1/2 cette réponse a été donnée par strager Nov 24 '10 à 10:12

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X