2014-10-29 43 views
0

我有一組已經構建的C#DLLs - 他們經歷了在AssemblyInfo.cs中設置版本號的過程,它們已經由我們的正式構建配置管理團隊,他們已經被歸檔到他們所屬的地方,所以我們不會丟失構建的DLL。在構建DLL之後添加屬性

現在,我必須將這些DLL的集合包裝成幾個遮陽傘,這些遮陽傘可以有不同的版本。例如:

Collection1 v1.0 Collection1 v1.1 Collection2 v1.0 
---------------- ---------------- ---------------- 
MyDll1.dll v1.0 MyDll1.dll v1.0 MyDll1.dll v1.0 
MyDll2.dll v1.1 MyDll2.dll v1.2 MyDll4.dll v1.0 
MyDll3.dll v1.2 MyDll3.dll v1.2 MyDll5.dll v1.1 

通過每個DLL的屬性看,我已經看到其一貫的領域,包括文件版本和產品版本號爲各自的版本號。

我想要做的是在某處捕獲集合名稱和版本號,以顯示它打包時屬於哪個集合。同樣,這些DLL已經建好了,所以我現在不能向AssemblyInfo.cs添加任何東西。

理想情況下,這將是另一個顯示在DLL的Details選項卡上的屬性,它可以使用某種工具注入到DLL中,但我不熟悉任何可以添加的Windows API調用/修改這些屬性。

請記住,這是針對這些DLL的內部版本,因​​此我們可以跟蹤開發過程中我們自己安裝的內容;那些將被包裝和「真實」發佈的將是原始構建的原始構件,並且不會有任何屬性添加到它們中。

編輯:第三方工具將很難使用;如果它不與Windows或Visual Studio一起提供,那麼如果它可以非常快地寫入,它將是強烈的首選。

謝謝。

回答

0

你可以嘗試通過微軟提供的ILMerge工具:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.aspx

只需創建一個包含所有自定義組件級別的一個DLL屬性要合併。然後運行ILMerge,將MyDll.dll指定爲主要程序集,將包含自定義屬性的DLL作爲第二個程序集。不要忘記指定/ copyattrs標誌。

全部ILMerge文檔可以在這裏找到:http://research.microsoft.com/en-us/people/mbarnett/ilmerge.doc

如果你的輸入組件進行簽名,你也有一個選項,以提供.snk文件,讓你的輸出組件將簽署爲好。

另一個選擇是使用ILdasm/ILasm工具的組合,這似乎是SDK的一部分。但是它需要更多的努力,因爲你需要修改兩者之間的IL代碼。

+0

哦。對不起,我忘記提及第三方工具將很難獲得批准。我更新了原始問題以澄清。謝謝。 – jia103 2014-10-29 21:44:54

+0

微軟幾乎沒有資格作爲第三方_。 – TaW 2014-10-30 13:11:08

+0

好的。其他尚未放入已批准工具列表中的工具不會預裝Windows,也不會隨Visual Studio CD/DVD提供,因此很難獲得批准。 – jia103 2014-10-30 20:29:18