visual-studio - Visual Studio 自定义数据可视化工具抛出 BadImageFormatException
问题描述
在我们的 c# 代码库(因此是托管代码)中,我们有一个在整个代码中广泛使用的类。鉴于它无处不在,我决定编写一个自定义调试器可视化工具,以便我们在调试时可以轻松检查这些对象。但是,我遇到了一个障碍——当我尝试在 IDE 中运行可视化工具时,我得到了一个BadImageFormatException
.
我发布这个是为了帮助遇到同样错误的其他人。我知道问题和解决方案是什么,并将发布。
解决方案
目前(从 Visual Studio 2019 开始)可以将可视化工具分成两部分:
- 被调试端 DLL -- 被注入到目标进程中,并且
- 调试器端 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 CPU或32-bit。被调试端 DLL 的目标平台应该与被调试进程相对应。
推荐阅读
- javascript - 接受用户输入以设置范围的范围滑块?
- python - 如何停止/恢复循环而不必终止终端?
- android - 在 Android 片段中使用相机
- google-maps-api-3 - Google 协作平台 + 地图 Javascript API + HTML5 地理位置
- mysql - (MySQL 8/Win10) 错误 1114:临时表空间不足 - 但奇怪吗?
- c# - 如何在 C# 中设置超时时间
- macos - 如何在 HSplitView 的子视图上设置最大宽度
- python - typeError 的 Sigmoid 计算问题
- c# - 在 C# 中解析 json 文件以进入所有部分和属性
- r - 使用 R 中的线性模型从接收方创建工作流时出错