2010-08-17 25 views
4

我試圖在我的基於WPF的項目(VS2010,Net4.0)上使用ILMerge,但我無法使合併的可執行文件運行。所以,我創建了兩個非常簡單的項目如何合併WPF應用程序的程序集?

  • 只是一個控制檯應用程序將打印出的Hello World
  • WPF應用程序,它顯示窗口的Hello World標籤

編譯每個項目後,我得到一個可執行文件(所以合併,並不真正合並任何東西,它只是爲了測試)。當然,每個可執行文件都有效

然後我 「合併」 每個可執行文件是這樣的:

"C:\Program Files\Microsoft\ILMerge\ilmerge" 
    /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 
    /lib:c:\Windows\Microsoft.NET\Framework\v4.0.30319\wpf 
    /out:Merged.exe MyApplication.exe 

(我提出的要求多隻爲SO可讀性)。好的,現在控制檯應用程序被合併並且運行得像以前一樣好,wpf應用程序合併時沒有任何錯誤,但是我無法運行它。我的意思是,我鍵入

Merged.exe 

任務欄閃爍,但沒有顯示出來 - 沒有窗戶,沒有錯誤,沒有什麼。

那麼我應該如何合併WPF應用程序?

+1

您可以將程序集視爲資源,請參閱我的答案[這裏] [1]。 [1]:http://stackoverflow.com/questions/1025843/merging-dlls-into-a-single-exe-with-wpf/7025702#7025702 – Matthieu 2011-08-11 12:19:11

回答

2

從我所知道的(並經歷過)ilmerge不能正確處理嵌入了xaml資源的WPF程序集。

See this question for some possible solutions/alternatives

+0

謝謝,看起來合併程序集的代價是接近1000美元:-( – greenoldman 2010-08-17 08:41:09

+0

是的,這是有點過分 - 不知道可以證明我自己對公司的成本。我最終做的是合併除WPF exe文件之外的所有程序集 – saret 2010-08-17 09:07:20

+0

雖然我不得不承認,解決問題的方法(SmartAssembly)非常出色,但對於我來說價格的10%是一個延伸,我從Mike Barnett(ILMerge的作者)那裏得到了確切的說法 - 它不能合併WPF應用程序。與您的解決方案。 – greenoldman 2010-08-18 04:46:56

0

如果我理解正確的話,你要嵌入所有裝配成一個exe文件。

有一個驚人的NuGet包叫Costura.Fody。合併程序集並不容易!

如果您需要合併資源DLL,您很幸運!有另一個NuGet延伸Costura.Fody叫Resource.Embedder