欲改變的2組件的解決方案,從而使得對ILMerge呼叫被調用,並且在一個單一的組件,構建結果的構建過程。此外,我希望能夠調試到生成的程序集。
準備 - 一個簡單的例子
- 新的解決方案 - ClassLibrary1的
- 創建Class1的靜態功能 '的GetMessage',返回的字符串 「Hello World」
- 創建新的控制檯應用程序,它引用ClassLibrary。
- 通過控制檯從main()輸出GetMessage。
您現在有一個2組裝應用程序,它向控制檯輸出「Hello World」。
那麼接下來..?
我想改變的控制檯應用程序的構建過程,包括它使用ILMerge,到ClassLibrary組件合併到控制檯組件
這一步後後生成步驟我應該能夠:
- 沒有ClassLibrary1.dll本直接運行控制檯應用
- 在VS運行經由F5(或F11)的控制檯應用程序,並能夠調試到各2個項目的。
有限的成功
我讀this blogpost和管理,以實現合併我是一個生成後命令後...
"$(ProjectDir)ILMerge.bat" "$(TargetDir)" $(ProjectName)
...和ILMerge。蝙蝠文件,其中讀...
CD %1
Copy %2.exe temp.exe
ILMerge.exe /out:%2.exe temp.exe ClassLibrary1.dll
Del temp.exe
Del ClassLibrary1.*
這工作得很好,事實上確實pro根據需要導出一個在VS環境外運行的exe文件。但是它似乎沒有生成符號(.pdb文件),VS可以使用它來調試代碼。
我認爲這是拼圖的最後一塊。
有誰知道我該如何做這項工作?
FWIW我在x64 Win7 x64機器上運行VS2010。
更新:我爲什麼要這麼做?
有人問:'我真的需要在調試場景中使用ILMerge嗎?「
我的解決方案的組件需要在同一文件夾中的其他解決方案(其中一些我可能會開發)共存
一些這些解決方案將不同版本的一些組件的共享依賴性。
所以解決方法1可能是由控制檯1和ClassLibrary1.dll(V1)和溶液2的可能是由Console2和Classlibrary1.dll(V2)的。
而不是註冊在GAC中的一切,我以爲我可以ILMerge的依賴關係的正確版本到解決方案的主要組件,以避免碰撞。
但是目前這使得它不可能調試解決方案,這是我需要的地方做與其他的解決方案,這將是目前結合。
這聽起來很複雜嗎?這是因爲它是..:d
不是有一個蝙蝠腳本,有一兩件事你可以做的是創建一個第三個項目(類型ClassLibrary將工作),其依賴是ConsoleApp和ClassLibrary;稱之爲PostSolutionBuildEvents。然後將其後構建爲ILMerge命令。這樣,你可以像'$(SolutionDir)'一樣訪問所有的宏。 – 2010-06-17 20:43:25
注意:您不需要爲此目的使用GAC東西,當您沒有解決此問題時,GACd到您的應用程序配置文件 – 2010-06-17 21:56:15
的任何內容都可以從「它正常工作」的範圍內獲得大量選項。同樣的問題在這裏... – 2011-12-15 15:20:30