References en tant que ressources incorporées

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);
                }
            };

Published by Emmanuel Istace

Musician, Software developer and guitar instructor. https://emmanuelistace.be/

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

%d bloggers like this: