参考链接:http://www.imooc.com/wenda/detail/589624

XmlSerializer xmlSerializer = new XmlSerializer(typeof(Class));

以上的序列化构造函数会照成 System.IO.FileNotFoundException 异常在输出窗口(不影响使用)

下面是来自互联网的回答,仅供参考:

1.

信不信由你,这是正常行为。抛出异常但由XmlSerializer处理,所以如果你忽略它,一切都应该继续正常。
我发现这很烦人,如果你搜索一下就会有很多关于这个问题的抱怨,但是从我读过的内容来看,微软并不打算做任何事情。
如果关闭该特定异常的第一次机会异常,则可以避免在调试时始终获取异常弹出窗口。在Visual Studio中,转到Debug - > Exceptions(或按Ctrl+ Alt+ E),Common Language Runtime Exceptions - > System.IO - > System.IO.FileNotFoundException
您可以在博客文章C#XmlSerializer FileNotFound异常(Chris Sells的工具XmlSerializerPreCompiler)中找到有关其他方法的信息。

2.

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

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

该异常由XmlSerializer的构造函数处理。您无需自己做任何事情,只需单击“继续”(F5)继续执行您的程序,一切都会好的。如果您对停止执行程序并弹出异常帮助程序的异常感到困扰,则可以关闭“Just My Code”,或者将FileNotFoundException设置为在抛出时执行,而不是在“User-未处理”。
要启用“Just My Code”,请转到工具>>选项>>调试>>常规>>启用我的代码。要在抛出FileNotFound时关闭执行中断,请转到Debug >> Exceptions >> Find >> enter’FileNotFoundException’>>取消选中System.IO.FileNotFoundException中的’Thrown’复选框。

3.

有一个解决方法。如果你使用
XmlSerializer lizer = XmlSerializer.FromTypes(new[] { typeof(MyType) })[0];
它应该避免这种例外。这对我有用。
警告: 不要多次使用,否则会有内存泄漏
如果你使用这种方法XmlSerializer多次创建同一类型的实例,你会像疯了一样泄漏内存!
这是因为此方法绕过了提供者XmlSerializer(type)XmlSerializer(type, defaultNameSpace)构造函数(所有其他构造函数也绕过缓存)的内置缓存。
如果您使用任何方法来创建不通过这两个构造函数的XmlSerializer,您必须实现自己的缓存,否则您将出血。