Ho due file DLL che vorrei includere nel mio file EXE per renderlo più facile da distribuire. Ho letto un po ‘qua e là come farlo, ho anche trovato un buon thread qui , e qui , ma è troppo complicato per me e ho bisogno di istruzioni di base reali su come farlo.
Sto usando Microsoft Visual C # Express 2010, e per favore scusami la mia domanda “low standard”, ma mi sento come se fossi uno o due livelli inferiore all’esercitazione di tutti gli altri: – / Se qualcuno potrebbe indicare come unire questi file DDL in il mio EXE in una guida passo-passo, sarebbe davvero fantastico!
Per .NET Framework 4.5
ILMerge.exe /target:winexe /targetplatform:"v4,C:\Program Files\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0" /out:finish.exe insert1.exe insert2.dll
ILMerge
cd C:\test
/out:finish.exe
sostituire finish.exe
con qualsiasi nome di file che si desidera. /out:finish.exe
devi dare i file che vuoi combinare. Scarica ilmerge e ilmergre gui . rende l’unione dei file così facile da usare e funziona alla grande
Fare riferimento alle DLL alle risorse e utilizzare l’evento AssemblyResolve per restituire la DLL delle risorse.
public partial class App : Application { public App() { AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { Assembly thisAssembly = Assembly.GetExecutingAssembly(); //Get the Name of the AssemblyFile var name = args.Name.Substring(0, args.Name.IndexOf(',')) + ".dll"; //Load form Embedded Resources - This Function is not called if the Assembly is in the Application Folder var resources = thisAssembly.GetManifestResourceNames().Where(s => s.EndsWith(name)); if (resources.Count() > 0) { var resourceName = resources.First(); using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName)) { if (stream == null) return null; var block = new byte[stream.Length]; stream.Read(block, 0, block.Length); return Assembly.Load(block); } } return null; }; } }
Usa Costura.Fody .
Devi solo installare il nuget e poi fare una build . L’eseguibile finale sarà autonomo .
Scaricare
ILMerge
Chiamata
ilmerge /target:winexe /out:c:\output.exe c:\input.exe C:\input.dll
Installa ILMerge come gli altri thread ti dicono
Quindi vai alla cartella di installazione, per impostazione predefinita C:\Program Files (x86)\Microsoft\ILMerge
Trascina i tuoi Dll ed Ex in quella cartella
Maiusc-Fare clic con il pulsante destro del mouse su tale cartella e selezionare Apri prompt dei comandi
Scrivi
ilmerge myExe.exe Dll1.dll /out:merged.exe
Nota che dovresti scrivere prima il tuo exe.
Lì hai il tuo exe unito. Questo potrebbe non essere il modo migliore se lo farai più volte, ma il più semplice per un uso una tantum, ti consiglio di mettere Ilmerge sul tuo percorso.
static class Program { /// /// The main entry point for the application. /// [STAThread] static void Main() { /* PUT THIS LINE IN YOUR CLASS PROGRAM MAIN() */ AppDomain.CurrentDomain.AssemblyResolve += (sender, arg) => { if (arg.Name.StartsWith("YOURDLL")) return Assembly.Load(Properties.Resources.YOURDLL); return null; }; Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault(false); Application.Run(new Form1()); } }
Per prima cosa aggiungi le DLL al tuo progetto: Risorse. Aggiungi una cartella “Risorse”
Inoltre è ansible utilizzare ilmergertool in codeplex con interfaccia GUI.
Ho risposto a una domanda simile per VB.NET
. Non dovrebbe tuttavia essere troppo difficile da convertire. Incorporare le DLL's
nella cartella Ressource
e al primo utilizzo viene AppDomain.CurrentDomain.AssemblyResolve
evento AppDomain.CurrentDomain.AssemblyResolve
.
Se vuoi fare riferimento ad esso durante lo sviluppo, aggiungi semplicemente un normale riferimento DLL
al tuo progetto.
Incorporare una DLL in un progetto
Ecco la documentazione ufficiale . Anche questo viene scaricato automaticamente al passaggio 2.
Di seguito è un modo molto semplice per farlo e ho creato con successo la mia app utilizzando .NET framework 4.6.1
Installa il pacchetto ILMerge nuget tramite gui o riga di comando:
Install-Package ilmerge
Verifica di averlo scaricato. Ora Installa (non sei sicuro del comando per questo, ma vai ai tuoi pacchetti di nuget): Nota: probabilmente hai solo bisogno di installarlo per una delle tue soluzioni se ne hai più
Passare alla cartella della soluzione e nella cartella dei pacchetti si dovrebbe vedere ‘ILMerge’ con un eseguibile:
\FindMyiPhone-master\FindMyiPhone-master\packages\ILMerge.2.14.1208\tools
Ora qui è l’eseguibile che è ansible copiare su \bin\Debug
(o ovunque sia stata creata la tua app) e poi in commandline / powershell fare qualcosa come qui sotto:
ILMerge.exe myExecutable.exe myDll1.dll myDll2.dll myDlln.dll myNEWExecutable.exe
Ora avrai un nuovo eseguibile con tutte le tue librerie in una!
NOTA: se stai provando a caricare un assembly non-ILOnly, allora
Assembly.Load(block)
non funzionerà e verrà lanciata un’eccezione: maggiori dettagli
Ho superato questo creando un file temporaneo e usando
Assembly.LoadFile(dllFile)
Ho trovato la soluzione di seguito sono le forms: –
Per Multiple Dll: –
C: \ Programmi (x86) \ Microsoft \ ILMerge> ILMerge.exe / destinazione: winexe /targetplatform:”v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 “/out:NewExeName.exe SourceExeName.exe DllName1.dll DllName2.dll DllName3.dll
Il comando dovrebbe essere il seguente script:
ilmerge myExe.exe Dll1.dll /target:winexe /targetplatform:"v4,c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\" /out:merged.exe /out:merged.exe