是否有可能阻止这种第一次机会异常
的这是它产生的问题(同时与选项调试停止对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异常停止,但我不喜欢被人停在这个特定的一个...
是的,但我想你不会喜欢它。
您可以使用sgen
生成Model.XmlSerializers
程序集,您可以将其包含在项目中。这将解决例外。
什么.NET将实际上做的是这样的:
- 创建
XmlSerializer
; - 检查是否有特定程序集的序列化程序(您的例外情况);
- 如果不是,则立即生成一个;
- 加载组件,或者是生成的组件,或者是生成的组件;
- 使用序列化器程序集来序列化和反序列化XML。
正如您所看到的问题出现在第2步中。这一切都发生在后台,除非您提供程序集,否则无法防止第一个更改异常。好的一面是:通过不动态生成序列化程序集,可以获得一些性能。
这就是我们正在使用的。您可以在后期制作活动中致电sgen。 您可以在microsoft网页上找到sgen的更多详细信息:https://blogs.msdn.microsoft.com/billwert/2008/02/23/use-of-sgen-exe-to-avoid-common-xmlserializer-performance -pitfalls/ – manni
谢谢..框架不是一个错误处理文件搜索,通过一个异常缺少99,99%的时间?有没有其他方法可以对调试器说:从来没有发现这种愚蠢的异常? – Revious
除了未检查'异常抛出',但'是未处理的异常',否。由于您可以使用'AssemblyResolve'处理程序来影响查找程序集,因此设计决定可能有些不错。 –
是它试图告诉你,你实际上没有安装打印机? – BugFinder
不,我有很多。我认为类XmlSerializer寻找一个DLL来反序列化对象Model.Print.PrinterInfo。所以它寻找一个Model.XmlSerializers,但它没有找到并抛出异常(这是处理的,但这种行为有点奇怪)。 – Revious