为什么我的XmlSerializer出错了?

时间:2008-11-17 00:54:59

标签: wpf system.xml

我对我的工作应用程序进行了一些更改,并开始在这行代码中收到以下错误。

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 个答案:

答案 0 :(得分:68)

发生这种情况的主要原因是因为我尝试序列化和反序列化的类型不匹配。我是序列化ObservableCollection(组)和反序列化业务对象 - 继承ObservableCollection(组)的组。

这也是问题的一部分...... 来自 - http://social.msdn.microsoft.com/Forums/en-US/asmxandxml/thread/9f0c169f-c45e-4898-b2c4-f72c816d4b55/

  

这个例外是其中的一部分   XmlSerializer的正常运行。它   预计会被抓住   在Framework代码中处理。   只需忽略它并继续。如果它   在调试过程中困扰你,设置   Visual Studio调试器只能停止   未处理的例外而非全部   异常。

答案 1 :(得分:8)

根据我发现的信息,与XmlSerializers关联的BindingFailure异常有时并不表示任何错误,应该被忽略,但有时你可以看到它。即在调试模式下,当您设置VS选项以显示所有抛出的异常时。

来源: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=88566&wa=wsignin1.0

顺便说一下。这或多或少是第一个答案中提到的事情之一:)。

答案 2 :(得分:1)

您似乎无法找到程序集FUSE.XmlSerializers。检查Assembly Binding Log Viewer(Fuslogvw.exe)的结果以查看它的位置(虽然上面显示的列表看起来很完整)。

尝试找到此程序集在计算机上的存储位置,并在其上运行NGen以查看它是否由于某种原因而无法加载。确保此DLL文件出现在 Bin \ Debug 目录中。 Visual Studio似乎没有获得依赖项的依赖项,因此您必须确保自己拥有自己需要的所有文件。

答案 3 :(得分:0)

您是如何加载包含Groups类型的程序集的?我猜你用Assembly.LoadFrom()加载它,因为XML序列化程序使用相同的上下文('LoadFrom'上下文)来尝试加载程序集以进行序列化。如果是这样,您有几个选择:

  1. 使用Assembly.Load()代替Assembly.LoadFrom()
  2. 将处理程序附加到AppDomain.AssemblyResolve以帮助CLR找到有问题的程序集。

答案 4 :(得分:0)

对于我所选择的几个Visual Studio项目,这是一个烦恼,我更喜欢只为 BindingFailure System.IO.FileNotFoundException 禁用break异常

在Visual Studio中: Ctl + D Ctl + E ,用于“例外”对话框:

1)取消选中托管调试助手

下的BindingFailure

2)取消选中公共语言运行时异常下的System.IO.FileNotFoundException。

啊,那更好: - )

......我看到1/2这个答案是由11月24日的strager和10点在10点12分给出的。