49

我在使用 XmlSerializer 的代码行上得到了 BindingFailure:

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

显示名称为 CustomXMLSerializeObject.XmlSerializers 的程序集未能加载到 ID 为 1 的 AppDomain 的“LoadFrom”绑定上下文中。失败的原因是:System.IO.FileNotFoundException:无法加载文件或程序集 XMLSerializeObject.XmlSerializers,版本=1.4.0.0, Culture=neutral, PublicKeyToken=null' 或其依赖项之一。该系统找不到指定的文件。

该错误很长,并继续解释预绑定状态信息以及它试图查找文件的位置。

我试图反序列化的自定义对象相对简单——只是一堆具有公共访问器的私有整数和字符串。我确实有一个私有变量,它是另一个自定义的可序列化类,但它只有带有公共访问器的私有字符串。

尴尬的部分?这只发生在我反序列化时。当我序列化对象时,那行代码运行良好。它工作正常,对象被反序列化并完美填充。不要真正注意到任何性能损失或加载时间过长。

这个警告到底是什么(不是错误或异常,之后程序运行良好)?为什么会这样?如何在不简单禁用警告的情况下防止它?

4

4 回答 4

67

根据奇怪的 XmlSerializer 错误

此异常是 XmlSerializer 正常操作的一部分。它是预期的,并将在框架代码中被捕获和处理。忽略它并继续。如果它在调试期间困扰您,请将 Visual Studio 调试器设置为仅在未处理的异常而不是所有异常上停止。

它可能是根据您选择监视的异常引起的。

你能告诉我你的异常是如何设置的吗:Debug -> Exceptions

如果取消选中 Managed Debugging Assistants 下 BindingFailure 的“Thrown”复选框,异常应该会消失。或者,如果您不想这样做,则可以继续,因为此异常是设计使然

于 2010-02-05T19:39:23.860 回答
42

使用以下方法构造您的 xmlSerializer 实例将解决该问题:

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

然后,您不需要关闭异常处理。

于 2014-03-05T02:24:06.733 回答
4

根据MS VS 2010 反馈,这就是它的设计方式。为了防止此异常并防止在运行时执行期间变慢,您需要生成 XML 序列化程序程序集。

我可以找到三个工具:Microsoft SGenXGenPlusMvp.Xml.XGen。不幸的是,截至这篇文章,这些都自 2007 年以来没有更新。

于 2012-05-31T18:20:38.720 回答
0

好吧,我找到了解决方案。我永远不能接受关闭异常作为答案。只是似乎有些不对劲......

似乎正在发生的事情是,在以前的程序集或当前程序集的以前版本中,某些引用被外部使用。即使您的代码可能早就放弃了这些引用,但名称仍然在程序集中被搜索,在某个神秘的地方。

转到您的 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))]

并保持您的异常打开!我将发布此类似性质的各种问题的答案。

于 2013-10-31T13:49:38.533 回答