Ce petit bout de code peut se montrer utile dans certains cas. Bien que ne respectant pas la philosophie .net, on peut se retrouver dans des cas où l’on doit n’avoir qu’un seul fichier exécutable portable en dehors du dotnet framework par exemple. Cela peut vite être le cas quand on développe des « utilitaires ».
Concernant l’intégration de la DLL il suffit de la rajouter dans un dossier ou un projet dédié en tant que ressources incorporées. Lié par lien la plupart du temps pour continuer à mettre à jours les dépendances lors des builds. Sinon, une hard copy est faite, ne reflétant pas les changements du fichier source.
Enfin pour charger l’assembly, le code ci-dessous fera l’affaire. (Nécessaire pour chaque AppDomaine utilisant les dll incorporées)
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => { String resourceName = "MyLoader.DLL." + new AssemblyName(args.Name).Name + ".dll"; using (var stream = Assembly.GetExecutingAssembly().GetManifestResourceStream(resourceName)) { Byte[] assemblyData = new Byte[stream.Length]; stream.Read(assemblyData, 0, assemblyData.Length); return Assembly.Load(assemblyData); } };