2016-09-20 96 views
1

的这是它产生的问题(同时与选项调试停止对CLR例外)代码:是否有可能阻止这种第一次机会异常

private static XmlSerializer _serializer = new XmlSerializer(typeof(Model.Print.PrinterInfo)); 

这是个例外

A first chance exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll 

Additional information: Could not load file or assembly 'Model.XmlSerializers, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified. 

这很烦人,因为调试目的,我经常需要启用CLR异常停止,但我不喜欢被人停在这个特定的一个...

+0

是它试图告诉你,你实际上没有安装打印机? – BugFinder

+0

不,我有很多。我认为类XmlSerializer寻找一个DLL来反序列化对象Model.Print.PrinterInfo。所以它寻找一个Model.XmlSerializers,但它没有找到并抛出异常(这是处理的,但这种行为有点奇怪)。 – Revious

回答

2

是的,但我想你不会喜欢它。

您可以使用sgen生成Model.XmlSerializers程序集,您可以将其包含在项目中。这将解决例外。

什么.NET将实际上做的是这样的:

  • 创建XmlSerializer;
  • 检查是否有特定程序集的序列化程序(您的例外情况);
  • 如果不是,则立即生成一个;
  • 加载组件,或者是生成的组件,或者是生成的组件;
  • 使用序列化器程序集来序列化和反序列化XML。

正如您所看到的问题出现在第2步中。这一切都发生在后台,除非您提供程序集,否则无法防止第一个更改异常。好的一面是:通过不动态生成序列化程序集,可以获得一些性能。

+1

这就是我们正在使用的。您可以在后期制作活动中致电sgen。 您可以在microsoft网页上找到sgen的更多详细信息:https://blogs.msdn.microsoft.com/billwert/2008/02/23/use-of-sgen-exe-to-avoid-common-xmlserializer-performance -pitfalls/ – manni

+1

谢谢..框架不是一个错误处理文件搜索,通过一个异常缺少99,99%的时间?有没有其他方法可以对调试器说:从来没有发现这种愚蠢的异常? – Revious

+0

除了未检查'异常抛出',但'是未处理的异常',否。由于您可以使用'AssemblyResolve'处理程序来影响查找程序集,因此设计决定可能有些不错。 –

相关问题