Unisci DLL in EXE?

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

  1. Apri CMD e cd nella tua directory. Diciamo: cd C:\test
  2. Inserisci il codice sopra.
  3. /out:finish.exe sostituire finish.exe con qualsiasi nome di file che si desidera.
  4. Dietro il /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 
  1. Installa ILMerge come gli altri thread ti dicono

  2. Quindi vai alla cartella di installazione, per impostazione predefinita C:\Program Files (x86)\Microsoft\ILMerge

  3. Trascina i tuoi Dll ed Ex in quella cartella

  4. Maiusc-Fare clic con il pulsante destro del mouse su tale cartella e selezionare Apri prompt dei comandi

  5. 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

  1. Installa il pacchetto ILMerge nuget tramite gui o riga di comando:

     Install-Package ilmerge 
  2. Verifica di averlo scaricato. Ora Installa (non sei sicuro del comando per questo, ma vai ai tuoi pacchetti di nuget): inserisci la descrizione dell'immagine qui Nota: probabilmente hai solo bisogno di installarlo per una delle tue soluzioni se ne hai più

  3. 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 

    inserisci la descrizione dell'immagine qui

  4. 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: –

  1. Scarica ILMerge.msi e installalo sulla tua macchina.
  2. Apri prompt dei comandi
  3. digita cd C: \ Programmi (x86) \ Microsoft \ ILMerge Preess Enter
  4. C: \ Programmi (x86) \ Microsoft \ ILMerge> ILMerge.exe / destinazione: winexe /targetplatform:”v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319 “/out:NewExeName.exe SourceExeName.exe dllname.dll

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