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

迁移至VS2019后vstestconsole无法找到自定义CatchEventsCollector

自定义DataCollector在VS2019 vstest.console中无法识别的解决思路

以下是针对该问题的排查与解决方向:

  • 检查DataCollector类的特性标记
    确认CatchEventsCollector类是否正确添加了匹配的特性:

    [DataCollectorFriendlyName("CatchEventsCollector")]
    [DataCollectorTypeUri("datacollector://TestCompany/FfbeTestFramework/1.0")]
    public class CatchEventsCollector : DataCollector
    {
        // 类实现
    }
    

    特性中的friendlyName和DataCollectorTypeUri必须与runsettings文件中的friendlyName、uri字段完全一致,包括大小写和格式。VS2019的TestPlatform对特性匹配的校验比旧版本更严格。

  • 验证程序集的强签名与版本信息
    如果你的Datacollector.dll是强签名的,runsettings中的assemblyQualifiedName必须包含公钥令牌。可以通过sn -T Datacollector.dll命令获取公钥令牌,补充到配置中:

    <DataCollector friendlyName="CatchEventsCollector" 
                   uri="datacollector://TestCompany/FfbeTestFramework/1.0" 
                   assemblyQualifiedName="Datacollector.CatchEventsCollector, Datacollector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxx" />
    

    确保版本号、公钥令牌与实际DLL的属性完全匹配。

  • 确认DLL依赖项完整性
    虽然日志显示DLL被加载,但可能存在依赖缺失导致类无法初始化。可以通过以下方式检查:

    • 使用Dependency Walker工具扫描Datacollector.dll,确认所有依赖的第三方DLL都存在于C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Extensions\TestPlatform\Extensions目录或系统环境路径中。
    • 附加调试器到testhost.net48.x86.exe进程,查看加载DLL时是否有隐藏的异常抛出。
  • 适配TestPlatform接口变更
    VS2019的TestPlatform相比VS2012有较大更新,确认你的DataCollector实现了正确的接口:

    • 针对.NET Framework,需继承Microsoft.VisualStudio.TestTools.Execution.DataCollector基类或实现IDataCollector接口。
    • 检查接口方法的签名是否符合新版本要求,比如异步方法的实现规范。
  • 手动注册DataCollector
    尝试在TestPlatform的配置目录中手动添加采集器清单:

    1. 进入路径C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\Extensions\TestPlatform\Extensions\datacollector.manifests
    2. 创建CatchEventsCollector.manifest文件,内容如下:
      <?xml version="1.0" encoding="utf-8"?>
      <ExtensionManifest xmlns="http://microsoft.com/schemas/VisualStudio/TestPlatform/2014">
        <DataCollector friendlyName="CatchEventsCollector"
                       uri="datacollector://TestCompany/FfbeTestFramework/1.0"
                       assemblyQualifiedName="Datacollector.CatchEventsCollector, Datacollector, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxx">
          <Configuration />
        </DataCollector>
      </ExtensionManifest>
      
    3. 重新运行测试命令,查看是否能识别采集器。
  • 检查平台位数匹配
    确保测试项目的目标平台(x86/x64)与testhost进程一致:

    • 在runsettings中添加<TargetPlatform>x86</TargetPlatform>指定位数
    • 或在vstest命令中加入/Platform:x86参数
      如果你的DLL是x86编译,但testhost运行在x64模式下,会导致类无法正常加载。
  • 排查详细加载日志
    现有日志仅显示DLL被加载,无法看到类初始化的细节:

    • 在vstest命令中添加/Blame参数,生成更详细的错误追踪信息
    • 附加调试器到testhost进程,在DataCollector的构造函数中设置断点,确认是否被调用;若未调用,检查是否有异常阻碍了类的实例化。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 14:15:49