如何解决C#单元测试中程序集加载的System.BadImageFormatException问题
解决C#单元测试中同时加载x64/x86程序集引发的System.BadImageFormatException异常
.NET运行时进程只能以单一CPU架构(x64或x86)运行,没法在同一个测试进程里同时加载不同位数的程序集,这就是你碰到System.BadImageFormatException的核心原因。下面是几种可行的解决办法:
拆分测试项目
给依赖x64和x86程序集的代码分别建独立的单元测试项目,各自设置对应平台目标:- 右键测试项目→属性→生成→平台目标,选择
x64或x86 - 保证测试项目的平台目标和它依赖的程序集位数完全匹配
- 右键测试项目→属性→生成→平台目标,选择
用条件编译或适配器切换架构
要是不想拆分项目,能在测试代码里通过条件编译指令区分不同架构的测试逻辑,或者借助测试框架的适配器配置:- 在测试项目属性里开启条件编译符号,比如
X64_TEST或X86_TEST - 写测试代码时用
#if指令隔离不同架构的测试:#if X64_TEST [Fact] public void TestX64Assembly() { // 测试依赖x64程序集的逻辑 } #endif #if X86_TEST [Fact] public void TestX86Assembly() { // 测试依赖x86程序集的逻辑 } #endif - 运行测试时,分别切换测试项目的平台目标执行对应测试
- 在测试项目属性里开启条件编译符号,比如
检查测试运行器的架构设置
像Visual Studio测试资源管理器这类工具默认可能用AnyCPU运行,得强制指定架构:- 在Visual Studio里,点击测试→测试设置→处理器架构,选择
x64或x86 - 确保测试运行器的架构和当前要执行的测试依赖的程序集位数一致
- 在Visual Studio里,点击测试→测试设置→处理器架构,选择
内容的提问来源于stack exchange,提问作者Nihar Sahoo
相关产品推荐
相关产品推荐

