因為一個 .NET 參照問題鬼打牆十分鐘,脫身後想起好像不是第一次遇到,肯定是當時沒好好寫篇筆記才被詛咒,趕緊補上。

模擬出相似情境如下,UnitTests 專案參照 MyConsoleApp 專案,呼叫其中 DummyModel.RandomString() 方法(註:範例錯打成 Dymmy 請無視),Visual Studio 有識別出方法帶出註解 [1],而專案 References 裡 MyConsoleApp 圖示也正常未顯示驚嘆號 [2],一切看似正常。

但實際上 UnitTests 無法編譯,出現找不到 MyConsoleApp.dll 錯誤:

以為自己撞鬼了,找了好一陣子,最後在一片 Warning 訊息之間找到線索:

答案出奇簡單,MyConsoleApp 專案是 .NET 4.6.1,UnitTests 是 4.5.2,舊版 .NET Framework 無法參照用新版 .NET Framework 編譯的元件。只是這個問題被歸類成 Warning 而非 Error,而 Visual Studio IDE 能包容這個狀況未給出明顯提示,讓我被迷惑。(後來試了幾次,有時 References 項目會出現如下圖的黃色警嘆號,有時不會)

有此經驗,下回再遇到參照看似正確卻編譯失敗的狀況,SOP 加入先拆座墊先檢查 Warning 排除 .NET Framework 版本相容問題準沒錯。

Case of referencing .NET project with higher version .NET framework than target project. The project failed to build but it's just a warning but not a error.


Comments

Be the first to post a comment

Post a comment