Почему я получил ошибку с моим XmlSerializer? - PullRequest
42 голосов
/ 17 ноября 2008

Я внес пару изменений в свое рабочее приложение и начал получать следующую ошибку в этой строке кода.

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

А вот и ошибка.

    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.

Что происходит?

Ответы [ 5 ]

68 голосов
/ 18 ноября 2008

Основная причина этого состояла в том, что у меня было несоответствие типов, которые я пытался сериализовать и десериализовать. Я выполнял сериализацию ObservableCollection (группы) и десериализацию бизнес-объекта - групп, которые унаследовали ObservableCollection (группы).

И это тоже было частью проблемы ... От - http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/9f0c169f-c45e-4898-b2c4-f72c816d4b55/

Это исключение является частью Нормальная работа XmlSerializer. Это ожидается и будет пойман и обрабатывается внутри кода Framework. Просто игнорируй это и продолжай. Если оно беспокоит вас во время отладки, установите Отладчик Visual Studio только для остановки необработанные исключения вместо всех исключения.

8 голосов
/ 16 декабря 2009

Согласно информации, которую я нашел, исключение BindingFailure, связанное с XmlSerializer, иногда не указывает на какую-либо ошибку и должно быть просто проигнорировано, но иногда это можно увидеть, i. е. в режиме отладки, когда вы установили параметры VS для отображения всех сгенерированных исключений.

Источник: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=88566&wa=wsignin1.0

Btw. это более или менее одна из вещей, упомянутых в первом ответе:).

1 голос
/ 17 ноября 2008

Похоже, вы не можете найти сборку FUSE.XmlSerializer. Проверьте результаты Просмотр журнала привязки сборки (Fuslogvw.exe), чтобы увидеть, куда он смотрит (хотя представленный выше список кажется довольно полным).

Попробуйте найти, где эта сборка хранится на вашем компьютере, и запустите на нем NGen , чтобы узнать, не загружается ли она по какой-либо причине. Убедитесь, что этот DLL-файл находится в вашем каталоге Bin \ Debug . Visual Studio, похоже, не получает зависимости от зависимостей, поэтому вы должны убедиться, что у вас есть все файлы, которые вам иногда нужны.

0 голосов
/ 21 июня 2014

Для избранных проектов Visual Studio, которые у меня есть, где это раздражает, я предпочитаю отключать разрыв при исключении только для BindingFailure и System.IO.FileNotFoundException .

В Visual Studio: Ctl + D , Ctl + E для диалога исключений:

1) Снять отметку BindingFailure в Помощники по управляемой отладке

2) Снимите флажок System.IO.FileNotFoundException в Общеязыковые исключения времени выполнения .

Аааа, это лучше: -)

... и я вижу 1/2, этот ответ дал страгер 24 ноября 2010 года в 10: 12

0 голосов
/ 17 ноября 2008

Как вы загрузили сборку, содержащую тип Groups? Я предполагаю, что вы загрузили его с Assembly.LoadFrom(), потому что сериализатор XML использует тот же контекст (контекст «LoadFrom»), чтобы попытаться загрузить сборки для сериализации. Если это так, у вас есть несколько вариантов:

  1. Используйте Assembly.Load() вместо Assembly.LoadFrom().
  2. Присоедините обработчик к AppDomain.AssemblyResolve, чтобы помочь CLR найти нужную сборку.
...