執行 .NET 測試專案時找不到 testhost.dll

把 netstandard1.x 和 netcoreapp1.x 從 .NET 專案的 target frameworks 移除之後,接著開始把相依套件更新到最新版本,結果陸續碰到新版本所帶來的 breaking changes。先記錄其中一個比較微妙的狀況……

👉TLDRMicrosoft.NET.Test.SDK v16.4 以上的版本,搭配 .NET Core 2.1、2.2 或 3.x 來跑測試應該都沒問題(使用 xUnit),就是不能搭配 .NET Core 2.0(以及 .NET Standard 2.0)。

狀況描述

為了讓 .NET 專案的相依套件能夠跟上時代,我開始把一些 .NET 專案的 target frameworks  去掉 .NET Standard 1.x .NET Standard 1.x 和 .NET Core 1.x,而只保留 .NET Standard 2.0/2.1 和 .NET Core 2.x/3.x。當這個「汰舊」工作完成,我就接著「換新」,逐一把各專案的相依套件更新到最新或還算新的版本。

然而,當專案的相依套件大致更新完畢時,卻發現原本可以執行的測試專案突然不能執行了。具體的情形是,在 Visual Studio 2019 使用 Test Explorer 來執行測試時,顯示有一個測試專案裡面的測試案例全都沒有執行,同時在最底下的狀態列告知「發現非預期的錯誤,請查看測試輸出面板。」如下圖:


如上圖的測試輸出面板,可以看到實際的錯誤訊息是:
找不到 ...\bin\Debug\netcoreapp2.0\testhost.dll。請發佈您的測試專案並重試。

Visual Studio 的測試結果摘要只顯示有些測試沒有執行(藍色驚嘆號圖示),不夠醒目,可能會沒注意到。若使用 dotnet test 命令來執行測試,就很容易發現這個錯誤,如下圖:



初次看到這個錯誤訊息,毫無頭緒,程式碼明明都通過編譯了,而且也沒有去更動測試程式碼。唯一有變動、而且比較可能有關係的,是更新了各專案的相依套件的版本。

解決方法

用錯誤訊息去搜尋,可以找到許多討論串,而我是在底下這帖 stackoverflow 討論串找到解法:

🎯 Unable to find testhost.dll. Please publish your test project and retry

其中 Andreas 的回答正好解決了我的問題:把測試專案的 target framework 從 netcoreapp2.0  改為 netcoreapp2.1 就行了。

想必是我最近更新專案的相依套件時,一併把 Microsoft.NET.Test.SDK 從 v15.9更新至 v16.5.0 而導致測試失敗。我把測試專案的 target framework 來回改成 netcoreapp2.0 和 2.1,確認了 2.0 無法執行測試,2.1 則沒問題。

另一位 SteveHansen 的留言則是明確指出,當他把 Microsoft.NET.Test.SDK 從 v16.2 更新至 v16.4 之後,就會出現上述錯誤,而他的解決方法是把測試專案的 target framework 從 netcoreapp2.0 改為 netcoreapp3.0。
💬 由此可見,Microsoft.NET.Test.SDK v16.x 搭配 .NET Core 2.1、2.2 或 3.x 應該都沒問題,就是不能搭配 .NET Core 2.0(以及 .NET Standard 2.0)。

如果你也碰到同樣的狀況,用上述方法卻沒能解決,可以檢查一下你的測試專案是否有安裝 Microsoft.NET.Test.Sdk 套件以及必要的測試套件。以 xUnit 為例,你需要在測試專案裡面加入 "xunit" 和 "xunit.runner.visualstudio" 套件。

相關討論串



沒有留言:

技術提供:Blogger.