web-dev-qa-db-fra.com

Fusionner DLL en EXE?

J'ai deux fichiers DLL que je souhaiterais inclure dans mon fichier EXE pour faciliter sa distribution. J'ai lu un peu ici et là comment faire cela, j'ai 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 comment faire cela.

J'utilise Microsoft Visual C # Express 2010 et je vous prie de bien vouloir excuser ma question "normes peu contraignantes", mais j'ai l'impression d'être à un ou deux niveaux en dessous de l'expérience de tous les autres: -/Si quelqu'un pouvait vous indiquer comment fusionner ces fichiers DDL mon EXE dans un guide pas à pas, ce serait vraiment génial!

49
Momro

Pour .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érez le code ci-dessus.
  3. /out:finish.exe remplace finish.exe par le nom de fichier de votre choix.
  4. Derrière le /out:finish.exe vous devez donner les fichiers que vous voulez combiner
82
Yuki Kutsuya

Télécharger ilmerge et ilmergre gui . Il est si facile de joindre les fichiers ive les a utilisés et fonctionne très bien

25
Kieran Hill

Référencez les DLL à vos ressources et utilisez AssemblyResolve-Event pour renvoyer la DLL de ressources.

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;
        };
    }
}
16
Destructor

Utilisez Costura.Fody .

Vous devez juste installer installer le nuget puis faire un build}. L'exécutable final sera autonome.

14
Igor Popov

Télécharger

ILMerge

Appel

ilmerge /target:winexe /out:c:\output.exe c:\input.exe C:\input.dll
10
TheVoidSeeker
  1. Installez ILMerge Comme les autres threads vous le demandent

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

  3. Faites glisser vos Dll et Exes dans ce dossier

  4. Faites un clic droit dans ce dossier et choisissez Ouvrir la commande Invite.

  5. Écrire

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

    Notez que vous devriez d'abord écrire votre fichier exe.

Là vous avez votre exe fusionné. Ce n'est peut-être pas la meilleure façon si vous allez àdo. Cela plusieurs fois, mais le plus simple pour une utilisation unique, je recommanderais de mettre Ilmerge sur votre chemin.

8
Henrik Karlsson
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());
    }
}

Commencez par ajouter les DLL à votre projet-Ressources. Ajouter un dossier "Ressources"

5
Paulos02

Vous pouvez également utiliser ilmergertool au codeplex avec une interface graphique.

2
Zain Ali

J'ai répondu à une question similaire pour VB.NET. Cela ne devrait cependant pas être trop difficile à convertir. Vous incorporez le DLL's dans votre dossier Ressource et lors de la première utilisation, l'événement AppDomain.CurrentDomain.AssemblyResolve est déclenché. 

Si vous souhaitez le référencer pendant le développement, ajoutez simplement une référence DLL normale à votre projet.

Incorporer une DLL dans un projet

0
Alex

NOTE: si vous essayez de charger une assemblée non-ILOnly, alors 

Assembly.Load(block)

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

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

Assembly.LoadFile(dllFile)
0
BoJl4apa

J'ai trouvé la solution ci-dessous sont les Stpes: -  

  1. Téléchargez ILMerge.msi et installez-le sur votre ordinateur.
  2. Ouvrir l'invite de commande 
  3. tapez cd C:\Program Files (x86)\Microsoft\ILMerge Preess Enter
  4. C:\Program Files (x86)\Microsoft\ILMerge> ILMerge.exe/target: winexe /targetplatform:"v4,C:\Windows\Microsoft.NET\Framework\v4.0.30319"/out:NewExeName.exe SourceExeName.exe DllName.dll

Pour plusieurs dll: -  

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

0
Rahul Singh

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

Voici un moyen très simple de le faire et j'ai construit avec succès mon application en utilisant .NET framework 4.6.1

  1. Installez le paquet nuget ILMerge via l’interface graphique ou la ligne de commande: 

    Install-Package ilmerge
    
  2. Vérifiez que vous l'avez téléchargé. Maintenant, installez (vous n'êtes pas sûr de la commande, mais allez simplement dans vos paquets de nuget):  enter image description here Remarque: vous n’avez probablement besoin de l’installer que pour l’une de vos solutions si vous en avez plusieurs.

  3. Accédez au dossier de votre solution et dans le dossier des 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 pourriez copier sur votre \bin\Debug (ou où que votre application soit construite), puis en ligne de commande/powershell, procédez comme suit: 

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

Vous allez maintenant avoir un nouvel exécutable avec toutes vos bibliothèques en un! 

0
benscabbia