星期二, 4月 11, 2017

[C#] 循環相依

之前曾有一次 dll 參考出現問題,就把 Solution 內全部 Project 產生的 dll 刪除,刪除完才發現,全部 Project 就沒有辦法 build,當時 code 放在雲端空間,所以就把刪除的 dll 回復就正常,當時也沒有想太多,這次模擬把 code 放上 VSTS 後,在另一台 PC 上拉下來,又發現 project 沒辦法 build,才意識到嚴重性,從 VSTS 上抓下來沒有辦法 build,這樣要如何多人協同開發阿,Orz

閱讀該篇 MSDN 文章 - 管理專案中的參考 後,才發現原來參考 dll 的方式是錯誤的,一直以來都是用[檔案參考],應該使用[專案對專案參考] 才對

參考管理員
  • 紅框:專案對專案參考
  • 橘框:檔案參考
專案對專案參考 MSDN 說明
專案對專案參考是包含組件的專案參考;您可以使用 [專案] 索引標籤建立專案對專案參考。 當給定專案路徑時,Visual Studio 即可找出組件。

當您有會產生組件的專案時,您應該參考該專案,而不要使用檔案參考 (請參閱下文)。 專案對專案參考的優點是它會在組建系統中建立專案之間的相依性。 如果自上次建置的參考專案已變更,則將會建立相依專案。 檔案參考不會建立組建相依性,因此可以建置參考專案而不需建置相依專案,且參考可能會遭到淘汰。 (也就是專案可以參考先前建置的專案版本。) 這會導致在 bin 目錄中需要單一 DLL 的數個版本,但這不可能達成。 發生這個衝突時,您會看到類似 警告: 無法將專案 'project' 中的相依性 'file' 複製至執行目錄,因為它會覆寫參考 'file' 的訊息

如果某個專案的 .NET Framework 目標版本為 4.5 版,而其他專案的目標版本為第 2 版、第 3 版、3.5 版或 4.0 版,則會建立檔案參考而非專案對專案參考。
檔案參考 MSDN 說明
檔案參考是 Visual Studio 專案內容外部之組件的直接參考;您可以使用 [參考管理員] 的 [瀏覽] 索引標籤建立檔案參考。 當您只有組件或元件,而且不需要會建立檔案參考做為輸出的專案時,請使用檔案參考。
把參考方式改為 [專案對專案參考],就跳出錯誤訊息,看到關鍵字 - 循環相依,終於知道犯了甚麼錯誤,>.<
循環相依 MSDN 說明
錯誤訊息中參考的專案,必須相依於選取的專案才能建置;選取的專案要相依於所參考的專案才能建置。必須解析循環參考,才能建置這兩個專案。

通常是在一個部署專案包含第二個部署專案的專案輸出,而第二個專案又包含第一個專案的輸出時,才會發生這種錯誤。
把 Code 重新整理後,在模擬一次就 OK

沒有留言:

張貼留言