首页 > 解决方案 > Visual Studio 自定义数据可视化工具抛出 BadImageFormatException

问题描述

在我们的 c# 代码库(因此是托管代码)中,我们有一个在整个代码中广泛使用的类。鉴于它无处不在,我决定编写一个自定义调试器可视化工具,以便我们在调试时可以轻松检查这些对象。但是,我遇到了一个障碍——当我尝试在 IDE 中运行可视化工具时,我得到了一个BadImageFormatException.

我发布这个是为了帮助遇到同样错误的其他人。我知道问题和解决方案是什么,并将发布。

标签: visual-studio64-bitdebuggervisualizer

解决方案


目前(从 Visual Studio 2019 开始)可以将可视化工具分成两部分

  1. 被调试端 DLL -- 被注入到目标进程中,并且
  2. 调试器端 DLL -- 加载到 Visual Studio。

两半使用序列化/反序列化在彼此之间传递数据。

可视化工具需要这种架构来定位多个框架——调试器端加载到 Visual Studio 中,因此它必须以 .NET Framework 为目标;调试对象端被注入到目标进程中,该进程可能以 .NET Core 或 .NET 5+ 为目标。(我向您推荐这个 repo以获得具有这种结构的最小可视化器;以及我编写的其他可视化器(1 2),它们也使用类似的架构。)

相同的架构适用于位。Visual Studio 是 32 位应用程序,所以调试器端不能是 64 位;它必须是 32 位或 AnyCPU。但是如果目标进程可能是 64 位的,则被调试端必须与目标进程匹配,并且必须是 64 位或 AnyCPU。

根据文档

通常,最好调试器端 DLL 和被调试端 DLL 都将Any CPU指定为目标平台。调试器端 DLL 必须是Any CPU32-bit。被调试端 DLL 的目标平台应该与被调试进程相对应。


推荐阅读