.NET Framework 4.6.2 WebAPI 2控制器测试报方法未找到错误求助
解决.NET Framework 4.6.2 WebAPI 2测试中的"Method Not Found" DLL冲突问题
这种版本不匹配导致的DLL冲突真的很头疼,我之前在升级.NET框架版本的时候也碰到过类似情况。结合你描述的场景——4.5.1项目正常、4.6.2测试报方法找不到,核心就是System.Web.Http(依赖Microsoft.AspNet.WebApi.Core 5.2.3)和GAC里的System.Net.Http版本不兼容导致的。给你几个具体的解决步骤:
1. 把System.Net.Http的引用从GAC转到NuGet
GAC里的全局版本很容易和项目本地引用冲突,建议你先这么做:
- 右键测试项目 → 管理NuGet程序包,检查是否已经安装了
System.Net.Http包。如果没有,先卸载当前GAC的引用(右键引用 → 删除),然后通过NuGet安装和Microsoft.AspNet.WebApi.Core 5.2.3兼容的版本。 - 你可以直接安装
Microsoft.AspNet.WebApi.Client包,它会自动帮你处理System.Net.Http的依赖版本,避免手动选版本出错。
2. 添加绑定重定向强制统一版本
就算你用了NuGet,有时候运行时还是会加载不同版本的DLL,这时候绑定重定向就能帮上忙。在测试项目的App.config里添加这段配置:
<configuration> <runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <!-- 统一System.Net.Http版本 --> <dependentAssembly> <assemblyIdentity name="System.Net.Http" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-4.2.0.0" newVersion="4.0.0.0" /> </dependentAssembly> <!-- 确保WebApi核心库版本统一 --> <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" /> </dependentAssembly> </assemblyBinding> </runtime> </configuration>
注意:newVersion要和你实际安装的System.Net.Http版本一致,你可以右键项目里的System.Net.Http引用 → 属性,查看具体版本号,替换掉上面的4.0.0.0。
3. 清理缓存并重新生成
有时候旧的DLL缓存会残留,导致问题一直存在:
- 右键解决方案 → 清理解决方案。
- 手动删除测试项目和WebAPI项目的
bin、obj文件夹。 - 重新生成整个解决方案。
4. 检查项目配置一致性
最后再确认两点:
- 测试项目的目标框架和WebAPI项目完全一致(都是.NET Framework 4.6.2)。
- 所有WebAPI相关的NuGet包版本统一,比如
Microsoft.AspNet.WebApi.Core、Microsoft.AspNet.WebApi.Client都用5.2.3版本,不要混合不同版本的包。
按照这些步骤操作下来,应该就能解决那个“method not found”的错误了,本质就是把所有相关DLL的版本统一,避免GAC的全局版本干扰项目的本地引用。
内容的提问来源于stack exchange,提问作者David Keaveny
相关产品推荐
相关产品推荐

