我正在嘗試使用ILMerge來獲得一個基本的VS 2012項目,這樣我最終可以移動到更復雜的示例(並最終能夠將其用於我的真實項目)。獲取基本的ILMerge案例工作
目前我在工作項目中有一個工作項目TestMain
和參考庫TestDLL
。
我的工作目錄(.. \ BIN \發佈)如下:
- ILMerge.exe
- TestDLL.dll
- TestDLL.pdb
- TestMain.exe
- TestMain .exe.config
- TestMain.pdb
- TestMain.vshost.exe
- TestMain.vshost.exe.config
- TestMain.vshost.exe.manifest
我的終端輸出如下:
C:...\bin\Release>ilmerge /target:winexe /out:ContainedProgram.exe "TestMain.exe" "TestDLL.dll"
An exception occurred during merging: ILMerge.Merge: Could not load assembly from the location 'C:...\bin\Release\TestMain.exe'. Skipping and processing rest of arguments. at ILMerging.ILMerge.Merge()
at ILMerging.ILMerge.Main(String[] args)
很簡單,不是嗎?我在這裏錯過了什麼?
更新:刪除.exe並只運行ILMerge庫工程。刪除.dll並僅使用可執行文件運行它不會更改錯誤輸出。
我也做了第二.dll和能夠使用ILMerge合併兩個現有的庫合併到一個具有以下內容:
ilmerge /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:Test.dll "TestDLL2.dll" "TestDLL.dll"
更新2所以我能夠創建一個TestRun.exe有以下幾點:
ilmerge /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:TestRun.exe "TestMain.exe" "Test.dll"
這花的.dll真實打包在一起,我的可執行文件打包他們的兩個參考庫。它的工作!我能夠得到預期的結果。
直到我將我的新可執行文件移出其主文件夾。
只要我把它移動到新位置,執行所產生這個錯誤:
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'TestDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
at TestMain.Program.Main(String[] args)
我的項目使用的4.0,所以我把下列標誌:'/上投放:V4,C:\ Program Files文件(x86)的\參考\組件\微軟\框架\ .NETFramework \ v4.0' ,但我仍然沒有得到任何東西。 – Joseph 2013-02-28 18:49:27
還嘗試了'/ targetplatform:v4,c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319'並且繼續收到相同的錯誤。 – Joseph 2013-02-28 18:52:36
我的問題是.dll不能僅僅作爲項目的參考添加。這些庫也必須導入到家庭解決方案中,並通過'References-> Add References ...-> Solution-> Projects'重新添加到項目引用中。否則,參考位置似乎是硬編碼的。 – Joseph 2013-02-28 20:06:33