更新程序集后xUnit测试因找不到依赖程序集失败求助
你遇到的是典型的程序集版本不匹配或部署缺失导致的测试跳过问题,我整理了几个针对性的解决步骤,按顺序试试:
同步测试项目的NuGet引用
很多时候主项目更新了依赖,但测试项目的引用没跟上。右键你的API.IntegrationTests项目,打开「管理NuGet程序包」,找到System.Web.Http,确认它的版本也是5.2.4。如果还是旧版本,直接更新到5.2.4,确保测试项目和主项目的依赖版本完全一致。添加/更新程序集绑定重定向
即使引用了正确版本,.NET的程序集绑定机制可能还在寻找旧版本。打开测试项目的App.config(Web测试项目则是Web.config),检查<runtime>节点,添加或更新针对System.Web.Http的绑定重定向:<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-5.2.4.0" newVersion="5.2.4.0" /> </dependentAssembly> </assemblyBinding> </runtime>这里的
publicKeyToken是System.Web.Http的标准公钥,若不确定,可以右键主项目里的System.Web.Http引用,查看属性中的公钥令牌确认。清理重建并删除残留文件
旧的编译输出可能干扰新版本程序集的加载。先在Visual Studio中点击「生成」→「清理解决方案」,然后手动删除测试项目下的bin和obj文件夹,最后右键解决方案选择「重新生成」,确保输出目录里都是最新的程序集文件。检查「复制本地」属性
右键测试项目中的System.Web.Http引用,打开属性面板,确认「复制本地」选项设置为True。如果是False,编译后这个DLL不会被复制到测试项目的输出目录,xUnit自然找不到它。更新xUnit运行器版本
若你的xUnit运行器版本较旧,可能对新版本的System.Web.Http兼容性不佳。尝试更新xUnit和xUnit.runner.visualstudio到与你的.NET Framework版本兼容的最新版本,再重新运行测试。
内容的提问来源于stack exchange,提问作者Cadel Watson

