簡體   English   中英

檢查解決方案中的二進制引用

[英]Check binary references in a solution

我正在尋找一種方法來檢測大型Visual Studio解決方案中的程序集引用問題:

  • 對錯誤位置的二進制引用,例如不在源代碼管理或另一個項目的輸出中的路徑
  • 解決方案中跨項目的對同一裝配體多個版本的二進制引用
  • 沒有路徑的二進制引用,可以將其重定向到GAC
  • 二進制引用應該是項目引用

整個故事

我從事的大型C#項目涉及將近200個項目。 隨着時間的流逝,存在的問題之一是添加了對程序集的引用,但並不總是引用相同的版本或正確的位置。

例如,一個項目可能沒有提示路徑就獲得了對System.Web.Mvc的引用,從而使其引用了GAC中的任何版本。 Visual Studio(和Resharper)還將提供添加丟失的引用的方法,但是可以通過將引用添加到另一個項目的輸出文件夾來實現。

現在,最近的Windows Update災難性事件使一些團隊成員陷入水中,無法建立解決方案。 可以想象,這為我們提高了裝配參考管理的優先級。

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

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

我真正想要的是在連續構建過程中檢查解決方案中的所有項目文件是否存在“錯誤”引用,以便始終檢查所有項目。

我一直在尋找類似的解決方案已有一段時間了,發現了很多靜態分析和代碼分析工具,但是沒有什么可以分析解決方案中的項目文件。

因此,在我提出自己的解決方案之前,已經有辦法做到這一點嗎?

更新資料

為了清理代碼庫,我創建了一些ScriptCS代碼,它將掃描所有csproj文件以引用Nuget程序包中的程序集並進行修復。 在GitHub上

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

如果創建類似的程序包,則很容易在解決方案節點上單擊鼠標右鍵,並確認該程序包已安裝在所有C#項目中。

如果您的分析更加復雜,並且除了.targets文件之外還需要使用程序集(自定義構建任務),則可以使用與Antlr4 NuGet包類似的方法,其中包含構建任務,資源和custom 。 props.targets文件,但沒有安裝該項目所引用的實際程序集。

與其將其添加到解決方案中的所有項目中,不如創建某種測試(單元測試,構建文件等),以將項目文件作為輸入,對其進行分析,如果OE或更多引用不正確,則引發錯誤。 比向項目文件添加(以及檢出,提交等)自定義構建步驟要容易得多。

即使您使用了先前提出的nuget程序包,您仍然必須手動檢查是否所有項目(200個項目?真的嗎?)都引用了該程序包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM