如何创建一个包含所有外部.dll的单个.exe文件?

时间:2015-07-29 06:43:51

标签: c# dll webkit external ilmerge

我已经完成了我的Windows桌面应用程序,它模仿了桌面小部件的行为。这个伪小部件将在其中包含一个使用Chrome页面呈现引擎的浏览器窗口中的内置版本。这就是为什么我使用WebKit .NET及其随附的所有.dll的原因。

根据这个tutorial,我制作了内置的网络浏览器。另外,我把所有WebKit .dll都放在输出文件夹中。

为了更容易使用,我想创建一个没有任何.dll的.exe文件。 我发现ILMerge是它的工具。

我尝试了很多命令,如:

  1. “ILMerge.exe /target:Bingo.exe CFLite.dll icudt40.dll icuin40.dll icuuc40.dll JavaScriptCore.dll libcurl.dll libeay32.dll libexslt.dll libxml2.dll insert2.dll libxslt.dll objc .dll pthreadVC2.dll SQLite3.dll ssleay32.dll WebKit.dll WebKit.Interop.dll WebKitBrowser.dll /out:BingoFinal.exe“

  2. ILMerge.exe Bingo.exe /out:BingoFinal.exe

  3. Thred

  4. 中提及的所有内容

    所有这些尝试都给我带来了这样的信息:

    • 无法从位置'C:\ Program Files(x86)加载程序集 \微软\ ILMerge \ Bingo.exe”。跳过并处理其余参数。 (Stackoverflow Thred

    PS 我不想使用Costura.Fody,因为它使用的是.NET 4.6 我想我已经尝试了ILMerge的Command的所有变体,但它仍然无效。

    Here is the folder with all files that I want to merge in to one file.

    谢谢。

1 个答案:

答案 0 :(得分:1)

ILMerge只能合并托管程序集。

在您的情况下,您的许多依赖项都是本机dll(通常是小写的),ILMerge无法处理这些。

合并托管版本可能会有效,但这不太可能满足您的需求,因为您仍然需要在运行时将不受管理的版本放在您的exe旁边。

Costura.Fody是支持非托管/本机程序集的正确方法。