NuGet 套件遺失問題紀錄
Generated by Perplexity 問題說明 前陣子我遇到一個值得記錄的問題(至少對我而言):在維護一個有點舊的 .NET framework 專案時,發現透過 ProjectReference 方式依賴的 NuGet 套件無法自動還原。經過一番調查後,才發現這是 NuGet 在處理某些舊式專案時的一個行為特性。對 .NET 很不熟的我覺得可以記錄一下,以防未來又忘記。 專案結構與重現情境 MainApp.csproj ← 主專案,透過 ProjectReference 參考 SharedLibrary.csproj └── SharedLibrary.csproj └── <PackageReference Include="ICSharpCode.SharpZipLib" /> 我的 solution 中有兩個專案: MainApp.csproj:主應用程式專案 SharedLibrary.csproj:共用函式庫,透過 ProjectReference 被 MainApp 參考 在 SharedLibrary.csproj 中,使用了常見的壓縮解壓縮函式庫 ICSharpCode.SharpZipLib,並以以下方式引用: <PackageReference Include="ICSharpCode.SharpZipLib" Version="1.4.2" /> 然而在建置 MainApp.csproj 時,卻發現 SharpZipLib 的相關類別無法解析,沒有編譯出 .dll 檔。反觀其他套件如 NPOI 和 EntityFramework 則一切正常,讓我相當困惑(因為不論是在 prodution 或是 test 環境中都沒看到 .dll 缺失的問題)。 至於為什麼會發生這種事情,我想…就技術債這三個字吧 嘗試與排查過程 一開始我找問題的方式比較粗暴簡單,那就是找其他也有引用 SharedLibrary.csproj,但卻可以成功編譯的專案,看他們跟有問題的專案差在哪裡。於是我找到了其他專案多的這一行: <PackageReference Include="EntityFramework" Version="5.0.0" /> 神奇的事情發生了,SharpZipLib 居然也能正確還原了! 這讓我開始懷疑問題出在 NuGet 的套件還原邏輯上。經過研究,終於找到癥結所在。 ...