2013-01-09 33 views
2

可能重複:
Embedding DLLs in a compiled executableVisual Studio 2010中的EXE包裝

我有幾個不同的.dll和依賴外部的.exe沿C#WinForms應用程序。

是否有可能以某種方式將它們全部編譯成一個可執行文件(而非安裝程序)只是獨立的可執行文件?

從VS 2010旗艦版如果可能的話?

+1

在發佈問題前,您應該*真的*考慮[**搜索**](http://bit.ly/11dYmgf)。你不可能認爲你是第一個需要這樣做的人,是嗎? –

+0

你做了什麼研究?分享你的研究有助於每個人告訴我們你發現了什麼,以及它爲什麼不符合你的需求。這表明你已經花時間去嘗試幫助自己,它使我們避免重申明顯的答案,最重要的是它可以幫助你得到更具體和相關的答案:)祝你好運! –

+0

我碰到過ILMerge,因爲有人已經在這裏提到過:http://stackoverflow.com/questions/189549/embedding-dlls-in-a-compiled-executable,但我仍然不確定是否可以添加EXEs/XML文件也是如此。 –

回答

1

簡而言之:可能工作的唯一方法是將所有外部文件添加爲嵌入資源和使用ILMerge

選項#1:以下步驟顯示瞭如何嵌入 Visual Studio內部的資源文件:

  1. 轉到解決方案資源管理器,
  2. 右擊資源文件,
  3. GO構建操作:選擇嵌入式資源。

您將在exe文件中引用該文件。稍後,您可以使用Reflection並在運行應用程序時獲取資源。從here借用源代碼:

選項#2與託管DLL的

對於你有兩個選擇託管的DLL:

  • 使用ILMerge。 ILMerge有一個很好的GUI界面,可以在這裏找到[] 7]
  • 將它們作爲資源嵌入,詳情請參見this article

查看以下CodeProject article that explains this

ILMerge是一個實用程序,可用於將多個.NET程序集合併到一個程序集中。 ILMerge需要一組輸入程序集並將它們合併到一個目標程序集中。輸入程序集列表中的第一個程序集是主程序集。當主要程序集是可執行文件時,則目標程序集創建爲具有與主要程序集相同入口點的可執行文件。另外,如果主要程序集具有強名稱並提供了.snk文件,則目標程序集將使用指定的鍵重新簽名,以使其也具有強名稱。

+0

很確定OP想要包含代碼DLL(不是純粹包含資源的DLL)到單個EXE中。你的答案更符合衛星組裝的要求。 –

+0

這真的不行。如果您的EXE引用了DLL,它將無法首先加載,因此無法提取它們。 –

+0

我已經添加了託管的dll選項,沒問題。 –

-1

如果u有源代碼,U可以包括你的DLL內容的表單應用程序類中並重新編譯它,U將得到單一的EXE

+0

-1 **問:**我有一個問題與X. **答:**如果你刪除X,你不會有任何問題。 –

+0

第二個DLL是外部的,EPPLUS –

1

ILMerge是可以用來合併多個.NET程序集到一個實用程序單一裝配。

+0

這是可能的只有當dll的管理dll的。 –

+0

是的 - 這是一個給定的。我對這個評論不太確定。你是說你的方法可以處理非託管的DLL嗎? –

+0

因爲嘗試在ILMerge中加載非託管一次時會遇到問題。即使你能弄明白,CLR可能會拒絕運行它,如果它感覺到託管代碼部分由未管理的dll生成的。 –

相關問題