C#XmlSerializer BindingFailure

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

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

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

错误是相当长的,并继续解释预绑定状态信息和它想要尝试find该文件的位置。

我试图去序化的自定义对象是相对简单的 – 只是一堆私有的整数和string具有公共访问器。 我有一个私人variables,这是另一个自定义的序列化类,但是只有私有string与公共访问器在其中。

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

什么是这个警告(不是一个错误或例外,程序运行良好之后)? 为什么会发生? 如何防止它,而不是简单地禁用警告?

根据奇怪的XmlSerializer错误 :

这个exception是XmlSerializer正常操作的一部分。 预计并将在框架代码中被捕获和处理。 只要忽略它,继续。 如果在debugging过程中困扰您,请将Visual Studiodebugging器设置为仅停止未处理的exception,而不是所有exception。

它可能是由于你select监视的例外而引起的。

你能告诉我你的例外如何设置:debugging – >例外

如果取消选中Managed Debugging Assist下的BindingFailure的“Thrown”checkbox,则exception应该消失。 或者如果你不想这样做,你可以继续,因为这个例外是devise

使用下面的方法来构build你的xmlSerializer实例将解决这个问题:

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

那么,你不需要closuresexception处理。

根据MS VS 2010反馈,这是如何devise的。 为了防止这种exception,并防止运行时执行速度变慢,您需要生成一个XML序列化器程序集。

有三种工具可以find: Microsoft SGen , XGenPlus和Mvp.Xml.XGen 。 截至这篇文章,不幸的是,自2007年以来没有任何更新。

好的,我find了一个解决scheme。 我永远不能接受closures例外作为答案。 只是似乎不知何故错误….

似乎正在发生的是在以前的程序集或当前程序集的以前版本中,某些引用是在外部使用的。 尽pipe你的代码可能早就放弃了这些引用,但在程序集中search的名字仍然有些神秘。

转到您的AssemblyInfo.cs文件并findThemeInfo:

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

并保持您的例外打开! 我将发布这个答案的类似性质的各种问题。