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

创建HttpConfiguration时CLR检测到无效程序的问题求助

问题:ApiController单元测试创建HttpConfiguration时抛出InvalidProgramException异常

测试代码

var key = HttpPropertyKeys.HttpConfigurationKey;
var config = new HttpConfiguration(); //此处抛出InvalidOperationException异常
controller.Request.Properties.Add(key, config);
...

错误信息

Test method .GetLastObject threw exception: System.InvalidProgramException: Common Language Runtime detected an invalid program.

已尝试的解决方案:

  • 关闭代码优化
  • 通过包管理器更新System.Web.Http库及其他相关库

上述方案均未解决问题,求以下帮助:

  1. 该错误的成因是什么?
  2. 可行的解决思路有哪些?

解答

错误成因分析

InvalidProgramException是CLR检测到不符合规范的IL代码时抛出的异常,常见触发场景包括:

  • 程序集版本冲突:测试项目与主项目引用的System.Web.Http或其依赖库版本不一致,导致加载的程序集代码不兼容
  • 编译损坏:项目编译过程中生成的IL代码出错,可能由编译器bug、磁盘写入异常或项目文件损坏导致
  • 混合平台问题:测试项目与主项目的目标平台(x86/x64/Any CPU)不匹配,引发运行时程序集加载错误
  • 第三方工具干扰:部分测试框架、代码分析工具可能篡改CLR正常加载流程,导致IL代码异常

解决思路

  • 统一程序集版本
    检查测试项目和主项目的packages.config或项目文件,确保System.Web.Http、Microsoft.AspNet.WebApi.Core、System.Net.Http等相关依赖包版本完全一致,统一版本后清理并重新编译解决方案
  • 清理重建项目
    • 删除解决方案下所有bin、obj文件夹
    • 执行Clean Solution后再Rebuild Solution
    • 若使用.NET Framework,可删除项目的.suo隐藏文件后重新打开项目
  • 对齐目标平台
    右键项目→属性→生成,将测试项目与主项目的目标平台设置为一致(如统一为x64或Any CPU),避免跨平台加载冲突
  • 验证测试框架兼容性
    确认使用的测试框架(NUnit/xUnit/MSTest)与Web API版本兼容,尝试升级测试框架到最新稳定版
  • 替换配置初始化方式
    尝试使用全局配置对象替代手动新建HttpConfiguration,示例代码:
    var config = GlobalConfiguration.Configuration;
    controller.Request.Properties.Add(HttpPropertyKeys.HttpConfigurationKey, config);
    
  • 排查第三方工具干扰
    暂时禁用测试项目中的代码分析、性能监控等第三方工具,排除其对IL代码的篡改影响

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 10:17:08