C # XmlSerializer BindingFailure

Je reçois un BindingFailure sur une ligne de code en utilisant le XmlSerializer:

XmlSerializer s = new XmlSerializer(typeof(CustomXMLSerializeObject)); 

L’assembly avec le nom d’affichage CustomXMLSerializeObject.XmlSerializers n’a pas pu être chargé dans le contexte de liaison ‘LoadFrom’ de AppDomain avec l’ID 1. La cause de l’échec était: System.IO.FileNotFoundException: impossible de charger le fichier ou l’assembly XMLSerializeObject.XmlSerializers, Version = 1.4.0.0, Culture = neutral, PublicKeyToken = null ‘ou l’une de ses dépendances. Le système ne peut pas trouver le fichier spécifié.

L’erreur est assez longue et continue en expliquant les informations sur l’état de pré-liaison et les endroits où il cherchait à trouver le fichier.

L’object personnalisé que j’essaie de désaligner est relativement simple – juste un groupe d’entiers et de chaînes privés qui ont des accesseurs publics. J’ai une variable privée qui est une autre classe sérialisable personnalisée, mais qui ne contient que des chaînes privées avec des accesseurs publics.

La partie maladroite? Cela ne se produit que lorsque je désérialise. Cette ligne de code fonctionne bien lorsque je sérialise l’object. Cela fonctionne bien et l’object est désérialisé et rempli parfaitement. Ne remarquez pas de perte de performance ou de temps de chargement.

Qu’est-ce que cet avertissement (pas une erreur ou une exception, le programme fonctionne bien après)? Pourquoi ça arrive? Comment puis-je l’empêcher sans simplement désactiver l’avertissement?

    Selon l’ erreur de Strange XmlSerializer :

    Cette exception fait partie du fonctionnement normal de XmlSerializer. Il est attendu et sera capturé et traité dans le code Framework. Ignorez-le et continuez. Si cela vous dérange pendant le débogage, définissez le débogueur Visual Studio pour qu’il ne s’arrête que sur les exceptions non gérées au lieu de toutes les exceptions.

    C’est probablement dû à vos exceptions que vous choisissez de surveiller.

    Pouvez-vous me dire comment vos exceptions sont configurées: Debug -> Exceptions

    Si vous décochez la case “Thrown” pour le BindingFailure sous les assistants de débogage géré, l’exception devrait disparaître. Ou si vous ne voulez pas faire cela, vous pouvez simplement continuer puisque cette exception est par conception

    Utilisez la méthode suivante pour construire votre instance xmlSerializer pour résoudre le problème:

     XmlSerializer s = XmlSerializer.FromTypes(new[] { typeof(CustomXMLSerializeObject) })[0]; 

    il n’est alors pas nécessaire de désactiver les manipulations d’exception.

    Selon MS VS 2010 Feedback, voici comment cela a été conçu. Pour éviter cette exception et empêcher un ralentissement lors de l’exécution, vous devez générer un assembly Serializer XML.

    Il existe trois outils que je pourrais trouver: Microsoft SGen , XGenPlus et Mvp.Xml.XGen . Malheureusement, aucun de ces articles n’a été mis à jour depuis 2007.

    Bon j’ai trouvé une solution. Je ne pourrais jamais accepter de désactiver les exceptions comme réponse. Juste semble en quelque sorte mal ….

    Ce qui semble se produire, c’est que dans les assemblys précédents ou les versions précédentes de votre assemblage actuel, certaines références étaient utilisées en externe. Même si votre code a depuis longtemps abandonné ces références, les noms sont toujours, certains mystérieux, recherchés dans l’assemblage.

    Accédez à vos fichiers AssemblyInfo.cs et recherchez ThemeInfo:

     [assembly: ThemeInfo( ResourceDictionaryLocation.ExternalAssembly, //where theme specific resource dictionaries are located //(used if a resource is not found in the page, // or application resource dictionaries) ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located //(used if a resource is not found in the page, // app, or any theme specific resource dictionaries))] 

    Remplacez le premier emplacement par «Aucun»:

     [assembly: ThemeInfo( ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located //(used if a resource is not found in the page, // or application resource dictionaries) ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located //(used if a resource is not found in the page, // app, or any theme specific resource dictionaries))] 

    Et gardez vos exceptions activées! Je posterai cette réponse à diverses questions de cette nature.