2013-02-28 88 views
1

我正在嘗試使用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)

回答

1

什麼版本的框架您使用的是?例如,如果您使用4.0/4.5,則可能需要設置一個目標平臺選項。

/targetplatform:version,platformdirectory

+0

我的項目使用的4.0,所以我把下列標誌:'/上投放:V4,C:\ Program Files文件(x86)的\參考\組件\微軟\框架\ .NETFramework \ v4.0' ,但我仍然沒有得到任何東西。 – Joseph 2013-02-28 18:49:27

+0

還嘗試了'/ targetplatform:v4,c:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319'並且繼續收到相同的錯誤。 – Joseph 2013-02-28 18:52:36

+0

我的問題是.dll不能僅僅作爲項目的參考添加。這些庫也必須導入到家庭解決方案中,並通過'References-> Add References ...-> Solution-> Projects'重新添加到項目引用中。否則,參考位置似乎是硬編碼的。 – Joseph 2013-02-28 20:06:33