2011-09-27 26 views
2

問題如何複製visual studio setup項目的「檢測到的依賴項」功能?

是否有一個罐頭的解決方案,將檢測(遞歸)給定的Visual Studio項目文件的所有依賴?這基本上是Visual Studio安裝項目的「檢測到的依賴項」功能所做的 - 但我需要通過編程訪問依賴項列表(理想情況下來自MSBuild)。

背景(如果你想了解實際問題,我試圖解決閱讀)

我工作的自動化構建的WinForms應用程序利用第三方UI庫。爲了成功構建應用程序,必須在構建/開發機器上(通過供應商的安裝程序)「安裝」庫(這會將程序集放入GAC並安裝許可組件)。供應商的dll必須通過我們的項目文件中的GAC來引用。不幸的是,沒有辦法避免這種「安裝」要求(我喜歡使用從我的源代碼管理系統獲取的本地引用,就像我幾乎所有其他的第三方引用一樣,但是這在這是不可能的案件)。

我們利用「插件」架構,因此將可執行項目不直接引用這些組件 - 它們都間接地通過「插件」項目(後者又由可執行項目中引用)引用。因此,在「插件」項目中將GAC引用設置爲「copy local = true」僅將供應商dll複製到插件項目的輸出目錄;它們不會遞歸複製到可執行項目的輸出目錄。因此,沒有安裝這些供應商dll的計算機上,可執行項目的輸出目錄的xcopy部署不起作用,因爲它們不在輸出目錄中。

我們目前使用MSI部署(通過Visual Studio安裝工程),並想切換到Xcopy部署。供應商的DLL目前正在被打包到我們的msi中,因爲依賴關係是由安裝項目的「檢測到的依賴關係」功能內發生的任何魔術「檢測」的。使我的xcopy部署工作的解決方案是隻需要可執行項目直接引用被其引用的插件使用的供應商dll,並將「copy local」設置爲true。爲了確保所有需要的供應商DLL已經以這種方式被引用,我想生成可執行項目的「檢測到的依賴關係」的名單,聲稱所有這些依賴存在於可執行項目的輸出目錄,並構建失敗如果他們不全都在場的話。

我可以通過分析的csproj文件,編譯所有的「參考」條目列表並遞歸地跟蹤項目引用這樣做我自己。不過,我希望在某處有罐頭功能,特別是考慮到「檢測到的依賴關係」足夠聰明,可以過濾出框架dll,但包含我的GAC引用的供應商dll。

謝謝!

回答

0

大多數情況下,您可以使用Reflection來解決這個問題 - 您的插件及其主機很可能具有通用接口合同。您的代碼在構建完成後會掃描所有程序集以使用一組已知的接口協定,並通過IDE擴展自動化向安裝程序項目添加/更新這些接口協定。編寫一個手動刷新的插件可能是一種選擇,編寫和註冊MSBuild任務是更好的選擇。

我知道這是不是一個「罐頭的解決方案」,但工作應該小於一個KLOC所需要的量。

+0

對不起 - 我可能還不夠清楚。我不想自動創建我的安裝程序項目。我正在尋找ELIMINATE我的安裝程序項目,並轉向基於xcopy的部署。但是,很難確保GAC引用的程序集最終會被複制到我的應用程序的輸出目錄中。這就是我想解決的問題(找出需要複製到我的輸出中的組件)。 –

+0

現在我明白了(我希望)。只需將這些DLL複製到解決方案中的文件夾(添加解決方案項目文件夾),將其檢入並使用_content_部署將它們添加爲_links_到主項目。這也適用於非託管DLL。 – aquaherd

相關問題