You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Visual Studio代码覆盖率分析抛出SqlCeException反序列化异常

问题分析与解决

问题描述

应用测试用例正常运行时全部通过,但使用Visual Studio代码覆盖率分析工具运行时,始终抛出如下异常:

Assert.Fail failed. The constructor to deserialize an object of type 'System.Data.SqlServerCe.SqlCeException' was not found.
at System.AppDomain.DoCallBack(CrossAppDomainDelegate callBackDelegate)
at MyTestlass.RunApplicationTest(CrossAppDomainDelegate test)

所有测试共享一个基类,其中包含初始化应用的方法:

protected static void RunApplicationTest(CrossAppDomainDelegate test) {
...
}

原因

Visual Studio代码覆盖率工具运行测试时,默认可能启用了跨应用域执行测试模式。当跨应用域调用(CrossAppDomainDelegate)中抛出SqlCeException时,.NET需要将该异常序列化后传递回主应用域,但SqlCeException类型未实现用于反序列化的特定构造函数(即接收SerializationInfo和StreamingContext参数的构造函数),导致反序列化失败,触发上述异常。而正常运行测试时未启用跨域模式,因此不会出现该问题。

解决方法

  • 关闭跨应用域测试模式:打开Visual Studio测试设置,找到代码覆盖率相关配置,禁用跨应用域运行测试的选项,改为在同一应用域内执行测试。
  • 捕获并转换异常:在RunApplicationTest方法的跨域调用内部,捕获SqlCeException,将其转换为自定义的可序列化异常(需实现带SerializationInfo和StreamingContext参数的构造函数)后再抛出,确保异常能正常跨域传递。
  • 内部处理异常:调整测试逻辑,在跨应用域执行的代码内部处理SqlCeException,避免将该异常抛出到外部应用域。

内容的提问来源于stack exchange,提问作者samann

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.15 04:42:36