2014-10-16 82 views
1

我正在尋找一種方法來檢測在一個大的Visual Studio解決方案與程序集引用問題:檢查二進制引用

  • 壞地點二進制引用,就像一個路徑不是在源代碼控制或另一個項目的輸出
  • 二進制到同一程序集的多個版本在解決跨項目引用
  • 沒有路徑二進制引用,可能被重定向到GAC
  • 二進制引用本來應該是項目引用

整個故事

我在一個大C#項目工作與幾乎200個項目。 隨着時間推移出現的問題之一是添加了對程序集的引用,但並非總是對同一版本或正確的位置進行引用。

例如,項目可能會在沒有提示路徑的情況下獲取對System.Web.Mvc的引用,從而使其引用GAC中的任何版本。 Visual Studio(和Resharper)也會提供添加缺少的引用,但可以通過添加對其他項目的輸出文件夾的引用來實現。

現在最近的Windows Update catastrophy讓一些隊員死在水中,無法建立解決方案。正如你所想象的那樣,這爲我們提高了組裝參考管理的優先級。

要檢測一些最明顯的問題,我已經設置了一個可以包含在每個csproj文件中的msbuild文件,並將檢測到錯誤的引用。

但是,需要手動編輯新項目文件才能包含該腳本。所以這將不可避免地被遺忘。

我真的很喜歡在連續構建過程中檢查解決方案中所有項目文件的「錯誤」引用,以便所有項目都將始終進行檢查。

我一直在搜索這樣的解決方案一段時間,發現了很多靜態分析和代碼分析工具,但沒有分析解決方案中的項目文件。

那麼,在我離開之前和roll my own解決方案,有沒有辦法做到這一點?

更新

爲了清理代碼庫,我創建了一個位ScriptCS代碼,會掃描所有的csproj文件中的NuGet包參考組件和解決這些問題。這是on GitHub

+3

*問題,要求我們建議還是找一本書,工具,軟件庫,教程或其他異地資源是題外話堆棧溢出,因爲他們往往以吸引自以爲是的答案和垃圾郵件。相反,描述問題,什麼迄今所做來解決它。* – EZI 2014-10-16 20:48:35

+3

@EZI我問一個具體的解決方案到具體的軟件開發問題,我會說,有資格作爲一個StackOverflow的話題 – 2014-10-16 20:50:36

+0

我們有一種一個相關的問題。隨着時間的推移,我們的解決方案最終會有兩個或三個版本的相同的NuGet包,因爲人們只需安裝最新的包而不是使用現有版本。任何人......我最終編寫了我自己的工具來分析軟件包並找出任何重複的東西。我懷疑你將不得不做同樣的事情。 – 2014-10-16 20:54:46

回答

3

您可以創建一個NuGet包,其唯一目的是將自定義的.targets文件合併到項目中。我最近使用這個策略來解決另一個問題(錯誤消息.snk文件)。

如果你創建一個類似的包,很容易右鍵單擊您的解決方案的節點上,並驗證它安裝在你所有的C#項目。

如果你的分析是比較複雜的,需要在除了.targets使用的組件(定製任務)文件,你可以像我使用的Antlr4 NuGet包,其中包含構建任務使用的方法,資源和自定義.props.targets文件,但由它被安裝在項目中引用沒有實際的組件。

2

而是將其添加到您的解決方案的所有項目,爲什麼不建立某種測試(單元測試,建立檔案,等等),可以採取一個項目文件作爲輸入,分析它,並拋出一個錯誤,如果OE或更多的參考資料不正確自定義構建步驟到項目文件比添加(以及檢出,提交等)要容易得多。

即使作爲較早提出你可以使用一個NuGet包,你仍然必須手動檢查是否所有的項目(200個項目?真的嗎?)引用包。