XmlSerializer在构造函数处给出FileNotFoundException

当我尝试序列化类型时,我一直在使用的应用程序失败。

像一个声明

XmlSerializer lizer = new XmlSerializer(typeof(MyType));

生产:

System.IO.FileNotFoundException occurred
  Message="Could not load file or assembly '[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified."
  Source="mscorlib"
  FileName="[Containing Assembly of MyType].XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null"
  FusionLog=""
  StackTrace:
       at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)
       at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection)

我没有为我的班级定义任何特殊的序列化程序。

我该如何解决这个问题?


相信与否,这是正常的行为。 抛出异常但由XmlSerializer处理,所以如果你忽略它,一切都应该继续下去。

我发现这非常糟糕,如果你稍微搜索一下,就会有很多抱怨,但从我读过的内容来看,微软并没有计划对此做任何事情。

如果关闭该特定异常的第一次机会异常,则可以避免在调试过程中始终收到异常弹出窗口。 在Visual Studio中,转至调试 - >例外(或按Ctrl + Alt + E),公共语言运行时例外 - > System.IO - > System.IO.FileNotFoundException。

您可以在博客文章C#XmlSerializer FileNotFound异常(Chris Sells的工具XmlSerializerPreCompiler)中找到有关其他方式的信息。


就像马丁舍伯恩说的那样,这是正常的行为。 XmlSerializer的构造函数首先尝试查找名为[YourAssembly] .XmlSerializers.dll的程序集,该程序集应该包含生成的用于序列化类型的类。 由于这种DLL尚未生成(它们不是默认的),因此会引发FileNotFoundException。 发生这种情况时,XmlSerializer的构造函数捕获该异常,并且该DLL由XmlSerializer的构造函数在运行时自动生成(这是通过在计算机的%temp%目录中生成C#源文件,然后使用C#编译器编译它们来完成的)。 对于相同类型的XmlSerializer的其他构造将只使用已经生成的DLL。

更新:从.NET 4.5开始,除非通过设置配置文件设置(useLegacySerializerGeneration)明确强制,否则XmlSerializer不再执行代码生成,也不会执行C#编译器的编译以在运行时创建序列化程序集程序集。 此更改消除了对csc.exe的依赖并提高了启动性能。 来源:.NET Framework 4.5自述文件,第1.3.8.1节。

该异常由XmlSerializer的构造函数处理。 没有必要自己做任何事情,你可以点击'继续'(F5)继续执行你的程序,一切都会好的。 如果您因停止执行程序并弹出一个异常帮助程序而引起的异常困扰,您可能会关闭“Just My Code”,或者您将FileNotFoundException设置为在抛出时中断执行,而不是在“User-未处理”。

要启用“只是我的代码”,请转到工具>>选项>>调试>>常规>>启用我的代码。 要在抛出FileNotFound时关闭执行中断,请转到Debug >> Exceptions >> Find >>输入'FileNotFoundException'>>从System.IO.FileNotFoundException中取消选中'Thrown'复选框。


在Visual Studio项目属性(“构建”页面,如果我记得它是正确的)有一个选项说“生成序列化程序集”。 尝试将其打开以生成[包含MyType的程序集]的项目。

链接地址: http://www.djcxy.com/p/54899.html

上一篇: XmlSerializer giving FileNotFoundException at constructor

下一篇: There was an error reflecting type