Почему я получил сообщение об ошибке с моим XmlSerializer?

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

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.

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

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

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

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

1) Снимите флажок BindingFailure в разделе Помощники по администрированию отладки

2) Снимите отметку с параметра System.IO.FileNotFoundException в разделе Исключения для исключения обычного языка.

Ahhh лучше: -)

... и я вижу 1/2, этот ответ дал strager 24.11.10 в 10:12