web-dev-qa-db-fra.com

Pourquoi ai-je eu une erreur avec mon XmlSerializer?

J'ai apporté quelques modifications à mon application de travail et j'ai commencé à obtenir l'erreur suivante sur 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.

Que se passe-t-il?

42
Doug

La raison principale en était que j'avais un déséquilibre dans les types que j'essayais de sérialiser et de désérialiser. Je sérialisais ObservableCollection (du groupe) et désérialisaisais un objet métier - Groupes dont hérité ObservableCollection (du groupe).

Et cela faisait également partie du problème ... De - http://social.msdn.Microsoft.com/Forums/en-US/asmxandxml/thread/9f0c169f-c45e-4898-b2c4-f72c816d4b55/

Cette exception fait partie de Fonctionnement normal de XmlSerializer. Il est prévu et sera attrapé et géré à l'intérieur du code-cadre . Ignorez-le et continuez. Si ça vous dérange pendant le débogage, définissez le Le débogueur Visual Studio ne doit s’arrêter que sur exceptions non gérées au lieu de toutes exceptions.

68
Doug

Selon les informations que j'ai trouvées, l'exception BindingFailure associée à XmlSerializers n'indique parfois aucune erreur et doit être simplement ignorée, mais vous pouvez parfois la voir i. e. en mode débogage, lorsque vous avez défini les options VS pour afficher toutes les exceptions levées.

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

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

8
Lukasz M

Il semble que vous ne puissiez pas localiser le Assembly Fuse.XmlSerializers. Vérifiez les résultats de la visionneuse de journal de la liaison Assembly (Fuslogvw.exe) pour voir où elle se trouve (bien que la liste présentée ci-dessus semble assez complète).

Essayez de localiser l’emplacement de cet assemblage sur votre ordinateur et exécutez NGen sur celui-ci pour voir s’il ne parvient pas à se charger pour une raison quelconque. Assurez-vous que ce fichier DLL apparaît dans votre répertoire Bin\Debug. Visual Studio ne semble pas avoir les dépendances de dépendances, vous devez donc vous assurer que vous avez parfois tous les fichiers dont vous avez besoin.

1
Brody

Comment avez-vous chargé l'assembly contenant le type Groups? Je suppose que vous l'avez chargé avec Assembly.LoadFrom() car le sérialiseur XML utilise le même contexte (le contexte 'LoadFrom') pour tenter de charger des assemblys pour la sérialisation. Si oui, vous avez deux options:

  1. Utilisez Assembly.Load() au lieu de Assembly.LoadFrom().
  2. Associez un gestionnaire à AppDomain.AssemblyResolve pour aider le CLR à trouver l'assembly en question.
0
Kent Boogaart