今天遇到的詭異茶包,估計會遇上的人不多,但還是記錄一下備忘。

在筆電上用 Visual Studio 2019 開發一切順利的 ASP.NET Core 3.1 專案,移到個人電腦建置時出錯,有幾個 NuGet 套件 ( ClosedXML、ExcelNumberFormat、System.Drawing.Common、Microsoft.EntityFrameworkCore.* ... 等等) 冒出 "Package XXX is not compatible with netcoreapp3.1" "Package XXX does not support any target frameworks" 錯誤訊息:

「不相容 .NET Core 3.1」顯然不是事實,因為出問題的套件有標明支援 .NET Standard 2.0,更何況,同一專案在筆電編譯執行完全正常。

移除 ClosedXML 套件再裝一次,並無起色。為了對照,另建新 ASP.NET Cor 專案加入 ClosedXML,重現了同樣的問題( ClosedXML、ExcelNumberFormat、System.Drawing.Common 與 netcoreapp3.1 不相容)。依據經驗,問題電腦的 NuGet Packages 資料夾涉嫌重大。找到 C:\Users\username\.nuget\packages,檢查 ClosedXML 目錄,果真發現問題,\closed\0.95.3\lib\少了 ClosedXML.dll 檔:

因 closedxml\0.95.3 資料夾存在,NuGet Restore 時不會重新下載,但既有目錄短少 .dll 檔,推測這就是導致錯誤的原因,ExcelNumberFormat、System.Drawing.Common 是 ClosedXML 所依賴的 NuGet 套件,因此一併出現在錯誤清單。至於另一個 Microsoft.EntityFrameworkCore.Sqlite.Design,檢查也少了 .dll 檔,缺檔原因不明,但已真相大白。於是我手動將出錯的 NuGet 套件資料夾刪除,再建置一次讓 Visual Studio 重新下載,問題就這麼... 狠狠打了我的臉,原本都準備要收工了,來不及綻開的微笑在臉上凍結。錯誤訊息沒有改變,檢查 packages 目錄,確認重新下載完成,ClosedXML.dll 有了,但錯誤依舊。試著刪除 .vs 資料夾重開專案,沒用。狠心把 packages 目錄整個清空全部重新下載,沒用。

最後,再試一次將問題 NuGet 套件移除再安裝,問題總算消失。

NuGet package throws "Package XXX is not compatible with netcoreapp3.1" error. After investigation, I found it's caused by missing dll in packages folder. Clearing package cache and re-installing the nuget package fixed the problem.


Comments

# by Noah

參考你的文章,已解決, 我是做系統還原點,導致跟你一樣的問題 以為是我的 SDK 有問題,重新安裝SDK也是有問題 原來是NUGET 會先抓原先已下載暫存,若沒有才會線上下載 真是搞定了,感謝您

Post a comment