我已經創建了一個應用程序,它需要在計算機上安裝ODBC連接器才能工作。由於我的應用程序需要連接到mysql數據庫,它只需要一個dll文件(MySql.Data.dll)就可以工作。如何合併相關的DLL(MySql.Data.dll)與我創建的EXE?
當我把這個DLL放在與應用程序相同的位置時它工作正常。現在我想合併這個DLL,以便我最終只有一個可執行文件?
我該如何合併這個依賴的DLL與我的可執行文件?
我已經創建了一個應用程序,它需要在計算機上安裝ODBC連接器才能工作。由於我的應用程序需要連接到mysql數據庫,它只需要一個dll文件(MySql.Data.dll)就可以工作。如何合併相關的DLL(MySql.Data.dll)與我創建的EXE?
當我把這個DLL放在與應用程序相同的位置時它工作正常。現在我想合併這個DLL,以便我最終只有一個可執行文件?
我該如何合併這個依賴的DLL與我的可執行文件?
如果它是一個純粹的.NET模塊,你可以嘗試ilmerge
效用。
你不能做到這一點,所有的組件將得到從某處引用...
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
兩者都是純淨的網絡模塊 – 2012-07-23 00:32:09
當然,這是'容易'的道路,但是要合併,您可以嵌入它們的源代碼。確保刪除所有與平臺無關的東西。例如,如果桌面版本,刪除所有RT垃圾。還可以像csproj,sln和AssemblyInfo一樣投擲額外的東西。概括地說,對於這個特定的lib中,你可以直接合並,但它是一個真正的PITA。因爲桌面源試圖成爲家居每一個平臺。 – 2016-08-11 11:42:49