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!
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
cd C:\test
/out:finish.exe
remplace finish.exe
par le nom de fichier de votre choix./out:finish.exe
vous devez donner les fichiers que vous voulez combiner 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
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;
};
}
}
Utilisez Costura.Fody .
Vous devez juste installer installer le nuget puis faire un build}. L'exécutable final sera autonome.
Installez ILMerge Comme les autres threads vous le demandent
Ensuite, allez dans le dossier d’installation, par défaut C:\Program Files (x86)\Microsoft\ILMerge
Faites glisser vos Dll et Exes dans ce dossier
Faites un clic droit dans ce dossier et choisissez Ouvrir la commande Invite.
É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.
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"
Vous pouvez également utiliser ilmergertool au codeplex avec une interface graphique.
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.
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)
J'ai trouvé la solution ci-dessous sont les Stpes: -
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
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
Installez le paquet nuget ILMerge via l’interface graphique ou la ligne de commande:
Install-Package ilmerge
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): Remarque: vous n’avez probablement besoin de l’installer que pour l’une de vos solutions si vous en avez plusieurs.
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
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!