Подтвердить что ты не робот

С# XmlSerializer BindingFailure

Я получаю BindingFailure в строке кода с помощью XmlSerializer:

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

Сборка с отображаемым именем CustomXMLSerializeObject.XmlSerializers 'не удалось загрузить в контексте привязки LoadFrom к AppDomain с идентификатором 1. Причиной отказа было: System.IO.FileNotFoundException: Не удалось загрузить файл или сборку XMLSerializeObject. XmlSerializers, Version = 1.4.0.0, Culture = neutral, PublicKeyToken = null или одна из его зависимостей. Система не может найти указанный файл.

Ошибка довольно длинная и продолжает объяснять информацию о состоянии предварительной привязки и места, которые она пыталась найти и найти файл.

Пользовательский объект, который я пытаюсь описать, относительно прост - просто куча частных целых чисел и строк, которые имеют общедоступные аксессоры. У меня есть частная переменная, которая является другим настраиваемым классом сериализации, но в этом нет ничего, кроме частных строк с общедоступными аксессуарами.

Неловкая часть? Это происходит только тогда, когда я десериализую. Эта строка кода отлично работает, когда я сериализую объект. Он отлично работает и объект десериализуется и заполняется отлично. Не замечайте потери производительности или длительного времени загрузки.

Что именно это предупреждение (а не ошибка или исключение, программа после этого прекрасна)? Почему это происходит? Как предотвратить его, просто отключив предупреждение?

4b9b3361

Ответ 1

В соответствии с Ошибка Strange XmlSerializer:

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

Вероятно, это связано с вашими исключениями, которые вы выбираете для мониторинга.

Можете ли вы рассказать мне, как настроены ваши исключения: Debug → Exceptions

Если вы снимите флажок "Брошенный" для BindingFailure в разделе "Управляемые помощники по отладке", исключение должно исчезнуть. Или если вы не хотите этого делать, вы можете просто продолжить, поскольку это исключение - по дизайну

Ответ 2

Используйте следующий метод для создания экземпляра xmlSerializer, чтобы устранить проблему:

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

тогда вам не нужно отключать обработку исключений.

Ответ 3

В соответствии с MS VS 2010 Обратная связь, как это было разработано. Чтобы предотвратить это исключение и предотвратить замедление во время выполнения, вам необходимо создать сборку XML-сериализатора.

Есть три инструмента, которые я могу найти: Microsoft SGen, XGenPlus и Mvp.Xml.XGen. На данный момент, к сожалению, ни один из них не обновлялся с 2007 года.

Ответ 4

Хорошо, я нашел решение. Я не мог согласиться на исключение исключений в качестве ответа. Просто кажется, что-то неправильно....

Что, кажется, происходит, так это то, что в предыдущих сборках или предыдущих версиях вашей текущей сборки некоторые ссылки использовались извне. Несмотря на то, что ваш код, возможно, давно отказался от этих ссылок, имена по-прежнему, некоторые таинственные, где-то искали в сборке.

Перейдите в файлы AssemblyInfo.cs и найдите 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))]

Измените первое место на "Нет":

[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))]

И держите свои исключения включенными! Я отправлю этот ответ на различные вопросы подобного характера.