文章標題很繞口,情境也有些複雜,先來個戰情簡報:
我有個共用程式庫專案 MyModels.csproj 同時被加入 A.sln 跟 B.sln 兩個解決方案,A.sln 開發過程發現 MyModels 某類別名稱有錯別字,Substitute 誤寫為 Substitue (結尾少一個 t),幸好專案仍在開發階段,趁早更正,省得日後每次見到心煩。使用 Visual Studio 的更名功能一下就搞定,A.sln 重新編譯跟測試都正常。
回頭修改 B.sln,解決方案包含了 MyModels.csproj,裡面的 Substiute 類別名稱已更新,但編譯時引用該類別的 ASP.NET MVC Controller 卻冒出以下錯誤:
Error CS7069 Reference to type 'Substitue' claims it is defined in 'MyModels', but it could not be found
詭異的是,透過 Visual Studio F12 Go to Definition 查到的都是更正後的名稱 Substitute,Intellisense 帶出的也是 Substitute,按下 F5 Start Debugging 或 F6 Build Solution 時 Visual Studio 卻抱怨 MyModels 裡沒有名為"Substitue"(之前拼錯的舊名稱)的型別。
推測可能跟 Visual Studio 的組件快取仍是舊版有關,但過去的經驗多與 NuGet packages 有關,發生在由 sln 直接參照的 csproj 還是第一次。爬文找到一篇文章:Visual Studio Cache Cleanup
照著文章介紹的做法,先關閉 VS,找到 %USERPROFILE%\AppData\Local\Microsoft\VisualStudio\VS版號\ComponentModelCache 資料夾,將其中的四個檔案刪除,再重新啟動 VS,編譯錯誤果然消失~
問題起因於 Cache ,移除並重新加入專案參照應該也能解決問題。如果以上做法都不管用,該文章還有進一步重設 VS 設定的做法,必要時可參考。