2012-07-23 64 views
2

我已經創建了一個應用程序,它需要在計算機上安裝ODBC連接器才能工作。由於我的應用程序需要連接到mysql數據庫,它只需要一個dll文件(MySql.Data.dll)就可以工作。如何合併相關的DLL(MySql.Data.dll)與我創建的EXE?

當我把這個DLL放在與應用程序相同的位置時它工作正常。現在我想合併這個DLL,以便我最終只有一個可執行文件?

我該如何合併這個依賴的DLL與我的可執行文件?

回答

1

如果它是一個純粹的.NET模塊,你可以嘗試ilmerge效用。

+0

兩者都是純淨的網絡模塊 – 2012-07-23 00:32:09

+0

當然,這是'容易'的道路,但是要合併,您可以嵌入它們的源代碼。確保刪除所有與平臺無關的東西。例如,如果桌面版本,刪除所有RT垃圾。還可以像csproj,sln和AssemblyInfo一樣投擲額外的東西。概括地說,對於這個特定的lib中,你可以直接合並,但它是一個真正的PITA。因爲桌面源試圖成爲家居每一個平臺。 – 2016-08-11 11:42:49

2

你不能做到這一點,所有的組件將得到從某處引用...

  • 從像.NET框架的路徑:

System.Net.dll

所有.NET應用程序都需要.NET Framework程序集才能運行,這就是爲什麼要執行您的應用程序的用戶需要.NET Framework安裝程序LLED。因此,您的應用程序知道在哪裏找到此程序集,並且不需要您將例如System.Net.dll程序集放在應用程序的相同路徑中,以便成功運行。

  • 或從外部路徑,如你的應用程序。

您的應用程序知道在哪裏可以找到運行.NET Framework程序集,但請等待!它還需要一些額外的dll才能運行,所以這就是爲什麼編譯你的應用程序時,你的MySql.Data.dll處於相同的路徑。

可能的解決辦法:

如果你想只是一個可執行嘗試使用勺工作室(很難找到完全破解版,並高價購買它)。這將使您可以嵌入任何您想要的程序集或所有.NET Framework,因此這將使您的應用程序不依賴於任何.NET Framework安裝或執行應用程序的用戶計算機中需要的程序集。

2.嘗試使用ILMerge,但請閱讀以下鏈接以瞭解您的代碼是否符合要求。

如何和重要信息:

http://www.codeproject.com/Articles/9364/Merging-NET-assemblies-using-ILMerge

http://www.blackwasp.co.uk/ILMerge.aspx

相關問題