我最近将一个应用程序从 .net 3.5 升级到了 4.0。自从我这样做后,启用了中断所有异常的调试设置,每次启动使用 EF 连接到数据库的应用程序的一部分时,我都会遇到一些这样的异常。确切的数字是可变的;有时我只得到一个,其他几个快速连续。
检测到 ReleaseHandleFailed 消息:“Microsoft.Win32.SafeHandles.SafeCapiHashHandle”类型的 SafeHandle 或 CriticalHandle 未能正确释放值为 0x06AD3D08 的句柄。这通常表明句柄通过其他方式被错误地释放(例如使用 DangerousGetHandle 提取句柄并直接关闭它或围绕它构建另一个 SafeHandle。)
瞄准 3.5 时,我从未遇到过这样的异常。这些异常没有附加任何有意义的调用堆栈,我得到的只是[External Code]
,拒绝任何简单的方法来本地化它们的来源。我怀疑 EntityFramework 以某种方式涉及的原因是应用程序的一部分使用 nHiberate 而不是生成任何这些消息。
运行可能涉及的其他依赖项:在所有情况下,ORM 都与 Sql Compact 数据库通信 MS Sync Framework 2.1 用于从 SqlServer 更新本地数据库。Entity 框架模型已经用 4.0 框架重新生成,我也将缓存数据库升级到 v4.0。
由于没有调用堆栈,我不确定这些消息是否属于框架内部自动清理的“无害”错误类别;或者如果有异常食者在应用程序的其他地方捕获它们。