如何合并WPF应用程序的程序集?

时间:2010-08-17 06:20:27

标签: c# wpf ilmerge

我尝试在基于WPF的项目(VS2010,Net4.0)上使用ILMerge,但我无法使合并的可执行文件运行。所以我创建了两个非常简单的项目

  • 只是打印出hello world的控制台应用程序
  • 显示带有世界标签的窗口的wpf应用程序

在编译每个项目之后,我获得了单个可执行文件(因此合并,并不真正合并任何东西,它只是用于测试)。每个可执行文件当然都有效。

然后我以这种方式“合并”每个可执行文件:

"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 app?

2 个答案:

答案 0 :(得分:2)

据我所知(并且经历过),ilmerge无法正确使用嵌入了xaml资源的WPF程序集。

See this question for some possible solutions/alternatives

答案 1 :(得分:1)

如果我理解正确,您希望将所有程序集嵌入到一个exe中。

有一个名为Costura.Fody的神奇NuGet包。合并装配不容易!

如果您需要合并资源DLL,那么您很幸运!还有另一个NuGet扩展了Costura.Fody,名为Resource.Embedder