只有累積,沒有奇蹟

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  區段加入下列代碼 (如果在不行可以指定版本)
  1. <PackageReference Include="Microsoft.AspNetCore.App" />
接著在重新將專案建置一次,就可以看到建置成功的畫面 (淚)
擦乾眼淚宣告懸案正式結案 !! 

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

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

Related Posts:

  • [UnitTest] Visual Studio 2017 按右鍵無法建立單元測試 ? 問題 最近心血來潮使用家中舊電腦小白寫 Code,在練習測試中發現竟然有點怪異,在要測試的 method 按下右鍵沒有 建立單元測試 Create Unit Test 選項,但相同練習專案拿到公司筆電就是正常的,經比對後發現舊筆電 Visual Studio 版本少安裝測試功能,以下簡單紀錄解決問題的過程 解決方案 在 Visual Studio 2017 早期版本這是已知問題,有開發者在 vs community 回報給開… Read More
  • [UnitTest] Reflect.cs not found in NUnit問題 最近在新的專案寫 UnitTest 過程中,執行完後 Visual Studio 卻跳出 Source Not Fount : Reflect.cs not found 錯誤,但單元測試還是可以成功,如下圖 且透過 debug UnitTest 時發現測試的值也沒問題,經搜尋後發現是 Visual Studio 2017 IDE 設定問題,將,這篇文章簡單紀錄處理問題過程 處理方式 釐清問題 按下… Read More
  • [UnitTest] NUnit 入門教學前言 NUnit 是一個 open source 的 .Net 單元測試框架,根據官方統計下載次數達到 3000 萬次,支援 .Net Framework 與 .Net Core,近幾年開始在寫單元測試以來一直是使用 NUnit 寫單元測試為主,最近計畫把常用的或是上課學到好用的功能寫成文章分享出來,以下簡單介紹如何在.Net Framework 使用 NUnit 寫單元測試 安裝 NUnit 首先我們到 Visual Studio … Read More
  • [UnitTest] Visual Studio 2017 新增單元測試時沒有 NUnit 選項 ?前言 新筆電總是讓人充滿驚喜,在使用上除了要重新安裝常用的開發工具外,像是 Visual Studio & SQL Server..等必須工具,還有些常用的套件與小工具也要一併安裝,NUnit 是蠻常用的 Test Framwroek 之一,在寫測試時在要測試的 method 下按下右鍵 create Unit Tests,選擇要使用測試的 Test Framework 即可,在測試專案中預設只有 MSTest 選項,如果需要 NUnit… Read More
  • [UnitTest] NUnit 參數測試 - 使用 TestCase、TestCaseSource前言 上一篇 NUnit 入門教學 簡單介紹如何使用 NUnit 撰寫單元測試,但在實務上在寫單元測試時不會那麼單純,舉例來說如果要針對某個 method 進行種不同情境的測試,僅差在不同的參數來多次驗證結果, 在 NUnit 官方文件中有提供很多好用的方法像是 TestCase、TestCaseSource 等方式可以解決此問題,以下會簡單分享小小研究後的說明與差異性,依據適合的情境使用相對應的方法 解決方案 要驗證的 sample… Read More

2 則留言:

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

    回覆刪除

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com