只有累積,沒有奇蹟

2019年3月28日 星期四

[UnitTest] ASP.NET Core 2.2 測試專案中的版本衝突

問題 
這幾天專案某項功能接近尾聲,要替其核心 ASP.NET Core 專案加上單元測試專案,加入後按下建置發現跳出 Error 錯誤訊息  "CS1705 Assembly 'xxxx, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' uses 'Microsoft.Extensions.Logging.Abstractions, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' which has a higher version than referenced assembly 'Microsoft.Extensions.Logging.Abstractions' with identity 'Microsoft.Extensions.Logging.Abstractions, Version=2.1.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60' "  加一個測試專案就造成參考 dll 版本不同,且測試專案並未加入任何參考類別庫就建置失敗怎麼想都不太對,這篇就針對此案例作簡單紀錄與分享若是有不清楚或是錯誤的地方歡迎討論予糾正

解決方法 
就自己過去經驗這類訊息是因為專案參考版本不同造成,但為了保險還是看一下案發現場錯誤訊息提到的 CS1705 ,提示訊息屬於編譯器錯誤,傳送門 
接著到專案與測試專案的參考進行比對,比對其 dll 的版本與新加入的測試專案 dll 版本號,經過地毯式的比對後發現其錯誤訊息提到的 dll 版號皆為相同並無異常,因此判定此推論不成立
接著,想到錯誤訊息提到 .NET Core 版本不同,因此開啟專案檢查兩個專案版本差異,檢查方式如下
專案按右鍵 > 屬性 > Application > Target Framework,經比對後兩者皆為 ASP.NET Core 2.2 版無誤,猜測再度失敗 !
快要走投無路的時候發現在微軟 github 也有許多人遇到類似的問題,討論傳送門如下
 Version conflicts in test project depending on a Microsoft.AspNetCore.App project #2253
而且在 ASP.NET Core 2.2 此問題似乎尚未解決 (狀態還沒 close),整理一下共通的症狀如下
  • 測試專案
  • 無法編譯的 dll 為 Mircosoft.AspNetCore、Mircosoft.Extension 
如果符合以上疑似症狀,嘗試了各種方法還是沒有辦法建置成功的話,請服用以下步驟
Step 1 : 專案按下右鍵,編輯專案檔 csproj
Step 2 : 在  itemGroup  區段加入下列代碼 (如果在不行可以指定版本)
<PackageReference Include="Microsoft.AspNetCore.App" />
接著在重新將專案建置一次,就可以看到建置成功的畫面 (淚)
擦乾眼淚宣告懸案正式結案 !! 

心得
神奇的是只要建置成功過一次之後,就無法再還原發現場狀況,不指定 Mircosoft.AspNetCore.App 版號也可以正常建置成功 (嚇.jpg),不知道算不算是 .Core 2.2 的bug,如果是希望新版出來時可以修復此問題,不然光看錯誤訊息要修復可能真的不太容易。

參考
https://github.com/dotnet/sdk/issues/2253

2 則留言:

  1. 感謝你, 我在 2.1 版也遇到了一樣的問題, 用大大的方法順利解決, 而且事後也無法重現

    回覆刪除

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com