情境
寫單元測試的時候編譯都沒問題,但在執行時一直報錯 System.MissingMethodException 的錯誤,查了一下發現跟 System.Net.Http
有關
System.MissingMethodException with message
“Method not found: ‘System.Web.Http.Results.ResponseMessageResult
System.Web.Http.ApiController.ResponseMessage(System.Net.Http.HttpResponseMessage)”
檢查測試專案與受測專案的 System.Net.Http
Nuget套件皆為同一個版本
但意外發現兩個專案的 System.Net.Http
參考卻為不同位置
照理來說應該都要參考到專案內的 packages 底下才對,檢查 .csproj
裡面的 Reference 並沒有寫錯
1 | <Reference Include="System.Net.Http, Version=4.1.1.1, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL"> |
在網路上也搜尋到相關文章討論似乎是 Visual Studio Bug 導致
這位仁兄也碰到一樣問題
他開啟了一個新專案
Nuget 安裝 System.Net.Http v4.3.3
建置時 System.Net.Http 參考都還是來自於 Package 資料夾底下
Nuget 安裝 System.Collections.Immutable v1.4.0
建置時 System.Net.Http 參考就跑到 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.Net.Http.dll 底下
解決方法
檢查 Microsoft.NET.Build.Extensions 資料夾底下的 dll 版本為 4.2.0.0
,而 Nuget System.Net.Http 4.3.2 的 dll 版本則為 4.1.1.1
,這也是間接導致發生此錯誤的原因。
但 Reference HintPath也沒寫錯,VS 裡面也沒辦法調整 dll 位置 , 最後索性直接刪除 Microsoft.NET.Build.Extensions 資料夾底下的 System.Net.Http ,重新建置後 dll 就重新指向 Package了,此問題得到解決
世界又再一次恢復了和平,!@#$%