Fusionner DLL en EXE?

j'ai deux fichiers DLL que j'aimerais inclure dans mon fichier EXE pour le rendre plus facile à distribuer. J'ai lu un peu ici et là comment faire cela , même trouvé un bon fil ici , et ici , mais c'est beaucoup trop compliqué pour moi et j'ai besoin de véritables instructions de base sur la façon de faire cela.

J'utilise Microsoft Visual C # Express 2010, et Veuillez excuser ma question "basse qualité", mais je me sens comme je suis un ou deux niveaux en dessous de l'exercice de tout le monde: - / si quelqu'un pouvait indiquer comment fusionner ces fichiers DDL dans mon EXE dans un guide étape par étape, ce serait vraiment génial!

46
demandé sur Community 2012-04-13 12:55:26

13 réponses

For. 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. ouvrez CMD et cd dans votre répertoire. Disons: cd C:\test
  2. insérer le code ci-dessus.
  3. /out:finish.exe remplacer finish.exe par n'importe quel nom de fichier que vous voulez.
  4. Derrière le /out:finish.exe vous devez donner les fichiers que vous voulez être combiné.
77
répondu Yuki Kutsuya 2014-05-07 00:50:29

Download ilmerge and ilmerre gui . fait de joindre les fichiers si facile ive a utilisé ces et fonctionne très bien

26
répondu Kieran Hill 2013-02-21 23:48:23

Référence à la Dll de vos Ressources et de l'utilisation de la AssemblyResolve-Événement pour revenir à la Ressource-DLL.

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;
        };
    }
}
15
répondu Destructor 2012-04-13 09:31:24

Utiliser Costura.Fody .

vous avez juste à installer le nuget et puis faire un build . L'exécutable final sera autonome .

11
répondu Igor Popov 2016-11-24 12:33:47

télécharger

ILMerge

Appel

ilmerge /target:winexe /out:c:\output.exe c:\input.exe C:\input.dll
10
répondu TheVoidSeeker 2014-05-07 00:56:22
  1. Installer ILMerge comme les autres fils vous disent à

  2. puis allez dans le dossier d'installation, par défaut C:\Program Files (x86)\Microsoft\ILMerge

  3. faites glisser votre Dll et Exes vers ce dossier

  4. Shift-Rightcliquez dans ce dossier et choisissez l'invite de commande ouverte

  5. écrire

    ilmerge myExe.exe Dll1.dll /out:merged.exe
    

    notez que vous devez d'abord écrire votre exe.

voilà ton ex fusionné. Cela pourrait ne pas être la meilleure façon si vous allez à le faire plusieurs fois, mais le plus simple pour une fois, je voudrais recommandez de mettre Ilmerge sur votre chemin.

7
répondu Henrik Karlsson 2014-05-07 01:01:31
static class Program
{
    /// <summary>
    /// The main entry point for the application.
    /// </summary>
    [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());
    }
}

ajoutez D'abord les DLLs à votre projet-Ressources. Ajouter un dossier "Ressources"

5
répondu Paulos02 2013-10-03 13:24:14

vous pouvez également utiliser ilmergertool chez codeplex avec interface GUI.

2
répondu Humble Coder 2012-05-07 10:51:33

j'ai répondu à une question similaire pour VB.NET . Il ne devrait toutefois pas être trop difficile à convertir. Vous avez intégré le DLL's dans votre dossier Ressource et sur la première utilisation, le L'événement AppDomain.CurrentDomain.AssemblyResolve est viré.

si vous voulez le référencer pendant le développement, il suffit d'ajouter une référence normale DLL à votre projet.

Embedd une DLL dans un projet

0
répondu Alex 2017-05-23 12:10:41

Voici la documentation officielle . Il est également téléchargé automatiquement à l'étape 2.

ci-dessous est une façon très simple de le faire et j'ai construit avec succès mon application en utilisant .NET framework 4.6.1

  1. Installer ILMerge package nuget, soit via l'interface graphique ou ligne de commande:

    Install-Package ilmerge
    
  2. vérifiez que vous l'avez téléchargé. Maintenant installez (pas sûr de la commande pour cela, mais juste aller à vos paquets nuget): enter image description here Note: vous n'avez probablement besoin de l'installer que pour une de vos solutions si vous avez plusieurs

  3. naviguez vers votre dossier solution et dans le dossier packages vous devriez voir 'ILMerge' avec un exécutable:

    \FindMyiPhone-master\FindMyiPhone-master\packages\ILMerge.2.14.1208\tools
    

    enter image description here

  4. maintenant voici l'exécutable que vous pouvez copier sur votre \bin\Debug (ou où que votre application est construite) et puis en ligne de commande / powershell faire quelque chose comme ci-dessous:

    ILMerge.exe myExecutable.exe myDll1.dll myDll2.dll myDlln.dll myNEWExecutable.exe
    

vous avez maintenant un nouvel exécutable avec toutes vos bibliothèques en une seule!

0
répondu benscabbia 2017-07-15 17:58:56

NOTE: Si vous essayez de charger un assemblage non-ILOnly, alors

Assembly.Load(block)

ne fonctionnera pas, et une exception sera lancée: plus de détails

j'ai surmonté cela en créant un fichier temporaire, et en utilisant

Assembly.LoadFile(dllFile)
0
répondu BoJl4apa 2018-03-25 09:06:31

J'ai trouvé la Solution CI-DESSOUS sont les Stpes: -

  1. Download ILMerge.msi et l'Installer sur votre Machine.
  2. Ouvrez L'Invite De Commande
  3. Type cd C:\Program fichiers (x86)\Microsoft\ILMerge Preess entrer
  4. C:\Program fichiers (x86)\Microsoft\ILMerge>ILMerge.exe / target: winexe / targetplatform: "v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319" entrée /sortie:NewExeName.EXE SourceExeName.exe DllName.dll

Pour Dll Multiple :-

C:\Program fichiers (x86)\Microsoft\ILMerge>ILMerge.exe / target: winexe / targetplatform: "v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319" entrée /sortie:NewExeName.exe SourceExeName.exe DllName1.dll DllName2.dll DllName3.dll

0
répondu Rahul Singh 2018-05-03 13:53:07

la commande doit être le script suivant:

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
-2
répondu Yuan 2017-02-02 19:38:16